How do I handle a 4-byte char array as a typical int in ANSI C?
某些背景信息:
我正在解析一个二进制文件,我需要读取4字节无符号整数。
我想确保无论在哪个平台上编译此解析器,“int”总是4个字节长。
我读过关于uint32_t&朋友们,但我只限于ANSI C.
提前致谢。
答案 0 :(得分:1)
在那里抛出一些预处理器命令
#include <limits.h>
#if LONG_BIT == 32
long buffer [BUFFER_SIZE];
#elif WORD_BIT == 32
int buffer [BUFFER_SIZE];
#endif
你也可以在运行时使用sizeof(int)。
答案 1 :(得分:0)
我建议不要试图覆盖数据,而是简单地编写函数来执行像uint32 GetUInt32LE(unsigned char *dat)
这样的事情,然后可以将其实现为return ((uint32)(dat[3]) << 24) | ((uint32)(dat[2]) << 16) | ((uint32)(dat[1]) << 8) | dat[0];
以获得最大的可移植性(假设有一个适当地定义uint32
,或者可以在已知int
已知为32位或更大的系统上更简单地定义。请注意,对于较小的系统,仍然有一些嵌入式编译器int
只有16位,因此需要对各个字节进行转换。在这样的系统上需要对dat[1]
进行转换,因为否则将像0xFF这样的字节值移位8会产生未定义的行为,其最可能的实际结果是将其解释为(int)(0xFF00),这将是符号扩展为0xFFFFFF00,破坏结果的两个高位字节。