我查了下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;谢谢赐教!!!

解决方案 »

  1.   

    1:仔细看hi的帮助In Delphi code, use Hi to obtain the high-order byte of an expression of type Word or Integer.Note: Hi treats Integer as a 16-bit value, even if it is 32-bit.hi返回的是一个16-bit也就是一个word(双字节)的高字节数值2:for j:=0 to 0 do表示只执行一次
      

  2.   

    循环一次,那就不用加循环了,只需要begin..end之间的代码了,我就奇怪为什么那位高人要这么做?
      

  3.   

    1、Hi函数返回的WORD参数高字节的值
    2、你输出的值是错误的,我这边的结果是0~255都是输出0,256会输出1
    3、for j:=0 to 0 do的用法估计是保留给以后扩展用
      

  4.   


    回复1。现在我明白了,函数中的参数是双字节的Word,最大数是65535即FFFF,但上面那位哥说的or integer是不是四个字节的啊?这点还不明白,四字节是多少的高字节啊??
    回复2。我的原句子里面有个分号!!请看清!
            然后我又试了showmessage(inttostr(hi(2)));然后一直试到256,输出结果是 { 1 }!
    回复3。恩,这个是个不错的解答!
      

  5.   

    integer的做法参见下面
    Note: Hi treats Integer as a 16-bit value, even if it is 32-bit. 
      

  6.   


    提示: Hi函数对待整型的参数比如一个16位的值,甚至是一个32位的值。
    那到底该如何取呢?16位的值65535可以是$FFFF,取FF
    32位的值??不懂。。
      

  7.   

    VC里不也有 这样的吗#define LOBYTE(w)           ((BYTE)((DWORD_PTR)(w) & 0xff))
    #define HIBYTE(w)           ((BYTE)((DWORD_PTR)(w) >> 8))和DELPHI的HI函数作用差不多