我查了下delphi帮助文档,hi(x)这个example is :var B: Byte;begin
B := Hi($1234); { $12 }//这句说明结果是十六进制的12
end;
然后我新建了一个工程,用buttonclick事件显示了下不带 $ 时会输出的结果:procedure TForm1.Button1Click(Sender: TObject);
begin showmessage(inttostr(hi(1)));//我在函数里没加$,指的是不是就是一个十进制的数?结果是{ 0 } !
end;然后我又试了showmessage(inttostr(hi(2)));然后一直试到256,输出结果是 { 1 }!
然后我又试了下512,输出结果是 { 2 }!
然后我又试了下767,输出结果还是 { 2 }!但是768,输出结果是 { 3 }!
然后我又试了下1023,输出结果还是 { 3 }!但是1024,输出结果是 { 4 }!
我有些看不明白了。这个函数的括号里究竟填个什么样的数呢?如果我填了不带$的整数,有什么用?
我在看一位高人的代码时想到的,他的原代码如下: PDUData[i]:=Hi(1); i:=i+1;
PDUData[i]:=lo(1); i:=i+1;//不知道有什么作用。这样写?
另外附加一个问题:
for j:=0 to 0 do //有0到0循环吗? begin
if RadioGroup1.ItemIndex=0 then
PDUData[i]:=Ord('1')
else
PDUData[i]:=Ord('0'); i:=i+1; //可以改成空字符对应的 ASKII
end;谢谢赐教!!!
B := Hi($1234); { $12 }//这句说明结果是十六进制的12
end;
然后我新建了一个工程,用buttonclick事件显示了下不带 $ 时会输出的结果:procedure TForm1.Button1Click(Sender: TObject);
begin showmessage(inttostr(hi(1)));//我在函数里没加$,指的是不是就是一个十进制的数?结果是{ 0 } !
end;然后我又试了showmessage(inttostr(hi(2)));然后一直试到256,输出结果是 { 1 }!
然后我又试了下512,输出结果是 { 2 }!
然后我又试了下767,输出结果还是 { 2 }!但是768,输出结果是 { 3 }!
然后我又试了下1023,输出结果还是 { 3 }!但是1024,输出结果是 { 4 }!
我有些看不明白了。这个函数的括号里究竟填个什么样的数呢?如果我填了不带$的整数,有什么用?
我在看一位高人的代码时想到的,他的原代码如下: PDUData[i]:=Hi(1); i:=i+1;
PDUData[i]:=lo(1); i:=i+1;//不知道有什么作用。这样写?
另外附加一个问题:
for j:=0 to 0 do //有0到0循环吗? begin
if RadioGroup1.ItemIndex=0 then
PDUData[i]:=Ord('1')
else
PDUData[i]:=Ord('0'); i:=i+1; //可以改成空字符对应的 ASKII
end;谢谢赐教!!!
2、你输出的值是错误的,我这边的结果是0~255都是输出0,256会输出1
3、for j:=0 to 0 do的用法估计是保留给以后扩展用
回复1。现在我明白了,函数中的参数是双字节的Word,最大数是65535即FFFF,但上面那位哥说的or integer是不是四个字节的啊?这点还不明白,四字节是多少的高字节啊??
回复2。我的原句子里面有个分号!!请看清!
然后我又试了showmessage(inttostr(hi(2)));然后一直试到256,输出结果是 { 1 }!
回复3。恩,这个是个不错的解答!
Note: Hi treats Integer as a 16-bit value, even if it is 32-bit.
提示: Hi函数对待整型的参数比如一个16位的值,甚至是一个32位的值。
那到底该如何取呢?16位的值65535可以是$FFFF,取FF
32位的值??不懂。。
#define HIBYTE(w) ((BYTE)((DWORD_PTR)(w) >> 8))和DELPHI的HI函数作用差不多