从一个二进制文件中读取数据,是一个字节一个字节读取,存储在字符数组中,然后想把这四个字节还原成DWORD,怎么转啊?

时间:2022-07-10 20:41:11
我从一个二进制文件中读取数据,是一个字节一个字节读取,存储在字符数组中,然后想把这四个字节还原成DWORD,怎么转啊?

求高手!!

11 个解决方案

#1


#define MAKEWORD(a, b)      ((WORD)(((BYTE)(((DWORD_PTR)(a)) & 0xff)) | ((WORD)((BYTE)(((DWORD_PTR)(b)) & 0xff))) << 8))
#define MAKELONG(a, b)      ((LONG)(((WORD)(((DWORD_PTR)(a)) & 0xffff)) | ((DWORD)((WORD)(((DWORD_PTR)(b)) & 0xffff))) << 16))
#define LOWORD(l)           ((WORD)(((DWORD_PTR)(l)) & 0xffff))
#define HIWORD(l)           ((WORD)((((DWORD_PTR)(l)) >> 16) & 0xffff))
#define LOBYTE(w)           ((BYTE)(((DWORD_PTR)(w)) & 0xff))
#define HIBYTE(w)           ((BYTE)((((DWORD_PTR)(w)) >> 8) & 0xff))

#2


先从BYTE来MAKEWORD,再用MAKELONG搞定。

#3


头文件:WinDef.h,VC自带的。

#4


好的,我试试!!先谢谢你了!

#5


注意大小字节序

#6


真是太感谢了,试了好多方法都没有成功,发现SDK好强大啊!!

#7


这回终于搞定老板给的任务了,谢谢答复者!!

#8


追问,三个字节可以写成整数吗(无符号整数!!)?

#9


char buf[4];

DWORD dwData=0;
字节序相同:可用  dwData=*(DWORD*)(buf);

如果不同,可一字节一字节来: 
dwData=buf[3];
dwData<<=8;
dwData+=buf[2];
dwData<<=8;
dwData+=buf[1];
dwData<<=8;
dwData+=buf[0];

其它数据类型类似,只要把对应数据放到对应位置就行了.  甚至可以按bit来.

#10


不是很明白,现在是三个字节啊,咋整?

#11


定义一个char变量存储不就行了,设置为3个字节。

#1


#define MAKEWORD(a, b)      ((WORD)(((BYTE)(((DWORD_PTR)(a)) & 0xff)) | ((WORD)((BYTE)(((DWORD_PTR)(b)) & 0xff))) << 8))
#define MAKELONG(a, b)      ((LONG)(((WORD)(((DWORD_PTR)(a)) & 0xffff)) | ((DWORD)((WORD)(((DWORD_PTR)(b)) & 0xffff))) << 16))
#define LOWORD(l)           ((WORD)(((DWORD_PTR)(l)) & 0xffff))
#define HIWORD(l)           ((WORD)((((DWORD_PTR)(l)) >> 16) & 0xffff))
#define LOBYTE(w)           ((BYTE)(((DWORD_PTR)(w)) & 0xff))
#define HIBYTE(w)           ((BYTE)((((DWORD_PTR)(w)) >> 8) & 0xff))

#2


先从BYTE来MAKEWORD,再用MAKELONG搞定。

#3


头文件:WinDef.h,VC自带的。

#4


好的,我试试!!先谢谢你了!

#5


注意大小字节序

#6


真是太感谢了,试了好多方法都没有成功,发现SDK好强大啊!!

#7


这回终于搞定老板给的任务了,谢谢答复者!!

#8


追问,三个字节可以写成整数吗(无符号整数!!)?

#9


char buf[4];

DWORD dwData=0;
字节序相同:可用  dwData=*(DWORD*)(buf);

如果不同,可一字节一字节来: 
dwData=buf[3];
dwData<<=8;
dwData+=buf[2];
dwData<<=8;
dwData+=buf[1];
dwData<<=8;
dwData+=buf[0];

其它数据类型类似,只要把对应数据放到对应位置就行了.  甚至可以按bit来.

#10


不是很明白,现在是三个字节啊,咋整?

#11


定义一个char变量存储不就行了,设置为3个字节。