一个二进制文件 94 0b 00 00 
我定义了一个Longword变量取这个二进制文件的前四个字节,数字显示是2964,我算了下2964的十六进制是OB94,这里就有点搞不清楚了,怎么和二进制文件的次序不一样呢?按我想想么应该是是940B0000,而是940B0000转换出来却是-1811218432,显然不对,请问各位大侠什么意思,这个问题解决了我在问下一个问题!

解决方案 »

  1.   

    Longword变量实际上对应与内存的四个字节的内容:
    94 0b 00 00
    它们对应的内存的地址是从低到高递增的,比如
    111 112 113 114这样看,文件中的次序跟内存中的其实一样。
    而在取Longword的值的时候,高地址在前,低地址在后,所以就变成了00 00 0b 94。更直观的,你可以把它们读取到byte数组里,次序是一致的!
      

  2.   

    var
      d:integer;
      s:string;d:=$940b0000;
    s:=format('%d',[d]);
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      d:integer;
      s:string;
    begin
    d:=$b94;
    s:=format('%d',[d]);
    ShowMessage(s);
    end;
      

  4.   

    楼主的问题就是一个数据大端,小端的问题
    http://www.cppblog.com/chaosuper85/default.html?page=1194 0b 00 00 Windows下应该这么看“00 00 0B 94”
      

  5.   

    实际上这涉及到byte ,word,longword的字节数据读取问题,只要想通就明白的.