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

Compare uint32_t with a loaded char[] from file C++

本文关键字:char 比较 加载 uint32 C++ 文件      更新时间:2023-10-16

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

如果buff是你的unsigned char[]缓冲区,你可以做:

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

memcmpstring.h中定义

是的,这是绝对可能的,但您的问题未明确说明。您要做的是获取字符数组的前 4 个字符并将它们转换为uint32_t;显而易见的问题:哪个字符对应于 32 位 int 的哪个字节? 这可能等同于询问这些字节是以小端序还是大端序存储的。 虽然现在我看到了你的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

如果您实际上希望测试当前系统的字节序,这可能更接近您想要的。