将uint32_t与文件C++中加载的 char[] 进行比较
Compare uint32_t with a loaded char[] from file C++
我有一个二进制文件,我从中加载无符号 char[] 中的整个文本和一个变量 const uint32_t LITTLE_ENDIAN_ID = 0x49696949;我需要将加载的 char[] 中的前四个字符与给定的uint32_t进行比较。这可能吗?
如果buff
是你的unsigned char[]
缓冲区,你可以做:
memcmp((unsigned char*)&LITTLE_ENDIAN_ID, buff, 4) == 0
memcmp
在string.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
如果您实际上希望测试当前系统的字节序,这可能更接近您想要的。
相关文章:
- 如何在C++中比较两个char数组
- 将动态阵列中的字符与char进行比较
- 有没有办法比较用 int 初始化的 char 类型的数组的 2 个元素
- 如何在C/ C 中比较两个char的两个2D阵列
- C++:如何将 char 变量分配给向量<char>并访问该向量的元素进行比较?
- 比较 char* 和 wchar_t* 类型的 C 字符串
- char*与上一条指令中设置的值的比较未优化
- 在函数内部填充和比较char*
- 如何将 char 类型数组传递给函数并将第一个字符数组复制到第二个图表数组并使用 c++ 进行比较
- 使用与char的比较
- 将 char * 与字符串文本进行比较时出现问题
- 为什么INT(char)的比较不起作用
- 如何比较strstr(lpcwstr,char*);
- 如何将字符串与多个char C 进行比较
- C 2D char阵列不当比较
- 比较终端中通过char *argv []的参数
- 为什么比较两次 char 变量比比较一次短变量更快
- 将uint32_t与文件C++中加载的 char[] 进行比较
- 比较C++中的许多char变量
- 最有效的const-char*比较是不区分大小写的