24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 1031  |  回复: 3

opticer

金虫 (小有名气)

[求助] 为什么用CFile读出来的字节顺序是反的

我想读一个文件,文件最开始是一个带符号的4字节整形常量,每个字节如下:
0x88  10001000
0x1b  00011011
0x03  00000011
0x6f  01101111
也就是这4个字节合在一块组成一个为:
0x881b036f
的有符号整数 这个值应该为 -2011495569。
下面是读这个值的简单代码,读出来发现字节顺序好像是反的,怎么回事?

CFile file(lpszPathName, CFile::modeRead|CFile::typeBinary);
LONG *pbuf = new LONG[1];
file.Read(pbuf, 4);

查看 pbuf 指向的值是 0x6f031b88,和我原先的值刚好反了,这里面有什么讲究吗?
需要怎样才能调过来呢?
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lurencyj

木虫 (著名写手)

【答案】应助回帖

★ ★ ★ ★ ★
感谢参与,应助指数 +1
cenwanglai(金币+5): 谢谢回复 ~~ 2012-03-06 00:22:38
jjdg说的即是,确实是高位和低位字节的原因。

我测试了一下,用c++把int类型的数字1写进了一个二进制文件里面,里面的内容(使用xxd -b)是:
00000001 00000000 00000000 00000000
低位到高位是由左到右排的。

我不在linux下面写程序,所以不方便测试MFC函数的程序。

或许也有其他方案,不过把输入文件里面的高低位顺序做个调整,是最直观的办法吧。。。
很女子很弓虽大
2楼2012-02-26 06:34:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lurencyj

木虫 (著名写手)

【答案】应助回帖

★ ★ ★ ★ ★
xzhdty(金币+1): 欢迎常来程序语言看看 2012-02-26 09:28:03
cenwanglai(金币+5): 谢谢回复~~ 2012-03-06 00:22:52
引用回帖:
2楼: Originally posted by lurencyj at 2012-02-26 06:34:11:
jjdg说的即是,确实是高位和低位字节的原因。

我测试了一下,用c++把int类型的数字1写进了一个二进制文件里面,里面的内容(使用xxd -b)是:
00000001 00000000 00000000 00000000
低位到高位是由左到右排的。 ...

如果楼主不想变动原输入文件。。。。。。

那么,可以给你的代码加一个邪恶小补丁:
CODE:
CFile file(lpszPathName, CFile::modeRead|CFile::typeBinary);
char *TempChar = new char[sizeof(Long)];
file.Read(TempChar, sizeof(Long));

// 把读取到的TempChar数组的二进制逆序保存到一个临时文件
// 然后:
LONG *pbuf = new LONG[1];
file.Read(pbuf, 4);

//删除临时文件。。。

Good luck!
很女子很弓虽大
3楼2012-02-26 07:21:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mellon2011

金虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★
感谢参与,应助指数 +1
cenwanglai(金币+5): 谢谢回复~~ 2012-03-06 00:23:04
在计算机中多字节数据类型在存储区内有一个字节排序问题.Intel 32位处理器采用little endian即小端字节排序,具体为:最低有效字节放在存储器字节地址较低的单元,最高有效地址放在存储器字节地址较高的单元. 而有些处理器如SUN SPARC采用Big Endian即高端字节排序,具体为:最低有效字节放在存储器字节地址较高的单元,最高有效地址放在存储器字节地址较低的单元.

从你的结果描述可以看出,你在读一个4字节的整形量,pbuf指向了4字节存储区的最低字节位置,你用的机器cpu是Intel 或x86兼容的。因此读出的次序就如同你描述的那样。
4楼2012-02-26 10:50:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 opticer 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 一志愿大工学硕,求调剂 +4 yub0811 2026-04-02 4/200 2026-04-02 21:36 by 百灵童888
[考研] 316求调剂 +12 舟自梗 2026-04-01 16/800 2026-04-02 17:33 by zzsw+
[论文投稿] chinese chemical letters英文版投稿求助 120+4 Yishengeryi 2026-03-30 6/300 2026-04-02 17:19 by Yishengeryi
[考研] 310求调剂 +17 争取九点睡 2026-03-30 17/850 2026-04-02 16:40 by guanxin1001
[考研] 一志愿北京科技大学085601材料工程英一数二初试总分335求调剂 +8 双马尾痞老板2 2026-04-02 9/450 2026-04-02 14:45 by 5896
[考研] 0832食品科学与工程学硕282调剂 +4 鱼在水中游a 2026-04-02 7/350 2026-04-02 14:12 by baoball
[考研] 化学308分调剂 +14 你好明天你好 2026-03-30 15/750 2026-04-02 13:39 by 嘻嘻笑22
[考研] 354求调剂 +4 lxb598 2026-03-31 5/250 2026-04-02 09:55 by Jaylen.
[考研] 307分求调剂 +14 (o~o) 2026-03-31 15/750 2026-04-01 20:43 by longlotian
[考研] 379求调剂 +3 ?苦瓜不苦 2026-04-01 3/150 2026-04-01 20:09 by 暮云清寒
[考研] 英一数二生物信息学287分,本科生物科学,求调剂 +3 碧水xyz 2026-03-29 4/200 2026-04-01 15:35 by plum
[考研] 085600,321分求调剂 +13 大馋小子 2026-03-31 13/650 2026-04-01 12:35 by chemdavid
[考研] 262求调剂 +9 励志一定发文章 2026-03-31 10/500 2026-04-01 12:22 by sunshine0013
[考研] 一志愿北交材料工程总分358 +5 cs0106 2026-04-01 7/350 2026-04-01 11:45 by wangjy2002
[考研] 环境工程 085701,267求调剂 +15 minht 2026-03-29 16/800 2026-04-01 10:13 by li_sujuan99
[考研] 0855机械初试280求调剂 +3 kazenotori 2026-03-31 3/150 2026-04-01 10:08 by JourneyLucky
[考研] 288资源与环境专硕求调剂,不限专业,有学上就行 +25 lllllos 2026-03-30 26/1300 2026-04-01 09:52 by 一只好果子?
[考研] 一志愿西交大080500材料学硕349 +6 jqx1258 2026-03-31 7/350 2026-03-31 21:08 by yuq
[考研] 276求调剂 +3 赵久华 2026-03-29 3/150 2026-03-31 10:06 by cal0306
[考研] 11408软件工程求调剂 +3 Qiu学ing 2026-03-28 3/150 2026-03-28 21:50 by zhq0425
信息提示
请填处理意见