将uint32_t与文件C ++中加载的char []进行比较

时间:2015-03-15 11:10:21

标签: c++

我有一个二进制文件,我从中加载unsigned char []和变量const uint32_t LITTLE_ENDIAN_ID = 0x49696949; 我需要将加载的char []中的前四个字符与给定的uint32_t进行比较。 这有可能吗?

2 个答案:

答案 0 :(得分:0)

如果buff是您的unsigned char[]缓冲区,则可以执行以下操作:

memcmp((unsigned char*)&LITTLE_ENDIAN_ID, buff, 4) == 0

memcmpstring.h

中定义

答案 1 :(得分:0)

是的,这绝对可能,但你的问题是不明确的。你想要做的是取你的字符数组的前4个字符并将它们转换为uint32_t;显而易见的问题:哪个字符对应32位int的哪个字节?这可能相当于询问这些字节是以little-endian还是big-endian顺序存储。虽然现在我看到你的LITTLE_ENDIAN_ID但我意识到它并不重要 - 它(奇怪地)是相同的前进和后退。

无论如何,你想要的是:

unsigned char[] text = ...
uint32_t x = text[0] << 24 + text[1] << 16 + text[2] << 8 + text[3];
if (x == LITTLE_ENDIAN_ID)
  // do something

或者同样的事情,但是

uint32_t x = text[3] << 24 + text[2] << 16 + text[1] << 8 + text[0];

或者我们可以做一些不寻常的事情,比如

union {
  uint32_t int_value;
  unsigned char[4] characters;
} converter;

unsigned char[] text = ...
converter x;
for (int i=0; i < 4; i++)
  x.characters[i] = text[i];
if (x.int_value == LITTLE_ENDIAN_ID)
  // do something

如果你真的想要测试当前系统的字节顺序,这可能更接近你想要的。