ANSI C中的固定宽度整数

时间:2012-07-24 12:48:41

标签: fixed-width c89

How do I handle a 4-byte char array as a typical int in ANSI C?

某些背景信息:

我正在解析一个二进制文件,我需要读取4字节无符号整数。

我想确保无论在哪个平台上编译此解析器,“int”总是4个字节长。

我读过关于uint32_t&朋友们,但我只限于ANSI C.

提前致谢。

2 个答案:

答案 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,破坏结果的两个高位字节。