首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi的等号左面可以赋值吗,求解

2013-04-07 
delphi的等号左边可以赋值吗,求解function HexToStr(const S: String): Stringvari: Integert: Bytebeg

delphi的等号左边可以赋值吗,求解
function HexToStr(const S: String): String;
var
  i: Integer;
  t: Byte;
begin
  SetLength(Result, Length(S) div 2);
  FillChar(PChar(Result)^, Length(Result), 0);
  for i := 1 to Length(S) div 2 * 2 do
  begin
    if (S[i] >= 'a') and (S[i] <= 'z') then
      t := Ord(S[i]) - Ord('a') + 10
    else if (S[i] >= 'A') and (S[i] <= 'Z') then
      t := Ord(S[i]) - Ord('A') + 10
    else if (S[i] >= '0') and (S[i] <= '9') then
      t := Ord(S[i]) - Ord('0')
    else
      t := 0;
    if i mod 2 <> 0 then t := t shl 4;

    Byte(Result[(i + 1) div 2]) :=Byte(Result[(i + 1) div 2]) or Byte(t);
    //上面这行代码为什么可以这么赋值,在delphi7下可以编译,在delphi2010中无法编译 ,求解。
  end;  
end;
[解决办法]
神奇,虽然大概理解这个意思,但觉得这种赋值方式不好,可以修改成如何:
Result[(i + 1) div 2] := Chr(Byte(Result[(i + 1) div 2]) or Byte(t));

[解决办法]
Byte(Result[(i + 1) div 2]) :=Byte(Result[(i + 1) div 2]) or Byte(t);
该改为:
Result[(i + 1) div 2] := chr( Byte(Result[(i + 1) div 2]) or Byte(t) );
[解决办法]
DELPHI自带函数IntToHex可实现这个功能
[解决办法]
强制类型转换?
[解决办法]
不用去理解啊,你照抄就是了。走得多,路就自然成了。

这个好像是基本语法吧,先计算右边的,再传递给左边。
[解决办法]
类型不匹配造成的 改成这样
function HexToStr(const S: ansiString): ansiString;
[解决办法]
我觉得Byte(Result[(i + 1) div 2]) :=Byte(Result[(i + 1) div 2]) or Byte(t);这句就像汇编一样:
mov byte ptr result[(i+1) div 2]),byte ptr[右边],
那个Byte()只是用来指定传输大小的,和byte ptr一个道理

热点排行