二进制文件问题,很简单的

eFainter 2012-03-14 01:04:17
一个二进制文件 94 0b 00 00 。。。。。。
我定义了一个Longword变量取这个二进制文件的前四个字节,数字显示是2964,我算了下2964的十六进制是OB94,这里就有点搞不清楚了,怎么和二进制文件的次序不一样呢?按我想想么应该是是940B0000,而是940B0000转换出来却是-1811218432,显然不对,请问各位大侠什么意思,这个问题解决了我在问下一个问题!
...全文
104 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Steven_WU 2012-03-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 s11ss 的回复:]

Longword变量实际上对应与内存的四个字节的内容:
94 0b 00 00
它们对应的内存的地址是从低到高递增的,比如
111 112 113 114

这样看,文件中的次序跟内存中的其实一样。
而在取Longword的值的时候,高地址在前,低地址在后,所以就变成了00 00 0b 94。

更直观的,你可以把它们读取到byte数组里,次序是一致的!
[/Quote]
实际上这涉及到byte ,word,longword的字节数据读取问题,只要想通就明白的.
Frank.WU 2012-03-14
  • 打赏
  • 举报
回复
高低位互换。。。。这么简单的问题。。。
一如当初 2012-03-14
  • 打赏
  • 举报
回复
楼主的问题就是一个数据大端,小端的问题
http://www.cppblog.com/chaosuper85/default.html?page=11

94 0b 00 00

Windows下应该这么看“00 00 0B 94”
eFainter 2012-03-14
  • 打赏
  • 举报
回复
三楼解释的比较模糊,四楼兄弟都不明白我问题问题
UserAD 2012-03-14
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
d:integer;
s:string;
begin
d:=$b94;
s:=format('%d',[d]);
ShowMessage(s);
end;
UserAD 2012-03-14
  • 打赏
  • 举报
回复
var
d:integer;
s:string;

d:=$940b0000;
s:=format('%d',[d]);
s11ss 2012-03-14
  • 打赏
  • 举报
回复
Longword变量实际上对应与内存的四个字节的内容:
94 0b 00 00
它们对应的内存的地址是从低到高递增的,比如
111 112 113 114

这样看,文件中的次序跟内存中的其实一样。
而在取Longword的值的时候,高地址在前,低地址在后,所以就变成了00 00 0b 94。

更直观的,你可以把它们读取到byte数组里,次序是一致的!
我看见佛 2012-03-14
  • 打赏
  • 举报
回复
关注下此神帖!
kaikai_kk 2012-03-14
  • 打赏
  • 举报
回复
先搞清楚,他是以什么进制保存的

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧