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

一些上下文:

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

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

我读过关于 uint32_t 和朋友的文章,但我仅限于 ANSI C。

提前致谢。

4

2 回答 2

2

在那里扔一些预处理器命令

#include <limits.h>

#if LONG_BIT == 32
    long buffer [BUFFER_SIZE];
#elif WORD_BIT == 32
    int buffer [BUFFER_SIZE];
#endif

您也可以在运行时使用 sizeof(int) 。

于 2012-07-24T13:05:28.690 回答
0

我建议与其尝试覆盖数据,不如简单地编写函数来执行类似的操作uint32 GetUInt32LE(unsigned char *dat),然后可以将其实现return ((uint32)(dat[3]) << 24) | ((uint32)(dat[2]) << 16) | ((uint32)(dat[1]) << 8) | dat[0];为最大可移植性(假设已uint32适当定义),或者可以在系统上更简单地定义其中 aint已知为 32 位或更大。请注意,仍然有一些嵌入式编译器适用于int只有 16 位的较小系统,因此需要对单个字节进行强制转换。演员表dat[1]在这样的系统上是必需的,因为否则将像 0xFF 这样的字节值左移 8 会产生未定义的行为,其最可能的实际结果是将其解释为 (int)(0xFF00),这将被符号扩展为 0xFFFFFF00,从而破坏结果的两个高字节。

于 2012-09-14T16:05:38.700 回答