c - memcmp 只适用于字符串吗?

标签 c memcmp

如果我发送 memcmp 两个指向整数的指针,那么它似乎将整数解释为字符。

例如:

int a = 5;
int b = 256;
int res = memcmp(&a,&b,sizeof(int));

在上面的代码中,它返回 1。

我想更好地理解这个函数,我想知道我是否使用错误,或者是否有一个类似的函数来比较保存 int 值的内存块.

最佳答案

假设 int 的大小为 4 个字节(大多数情况下,但并非总是如此):

  • 在小端处理器上,您有:
    • int a = 5;//最低地址到最高地址 0x05 0x00 0x00 0x00
    • int b = 256;//最低地址到最高地址 0x00 0x01 0x00 0x00
  • 在大端处理器上,您有:
    • int a = 5;//最低地址到最高地址 0x00 0x00 0x00 0x05
    • int b = 256;//最低地址到最高地址 0x00 0x00 0x01 0x00
<小时/>

现在,函数 memcmp 按顺序比较每对字节:

  • 如果第一个操作数的字节大于第二个操作数的字节,则返回+1
  • 如果第一个操作数的字节小于第二个操作数的字节,则返回-1
  • 如果它完成比较而没有遇到任何这样的字节对,则返回 0
<小时/>

如您所见:

  • 在小端处理器上,比较第一对字节 (0x05 > 0x00) 后将返回 +1
  • 在大端处理器上,比较第三对字节 (0x00 < 0x01) 后将返回 -1

关于c - memcmp 只适用于字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24833532/

相关文章:

c - 修改c中文件的现有内容

c - 未定义对 'gnutls_...' 函数的引用

c - 使用 sprintf 的读写系统调用

c - 任意函数的泰勒级数展开

在 C 中使用 memcmp 比较结构的一部分

c - mem 比较数组以获取匹配字节数

c - 在C中查找 "double free or corruption (out):"的原因

c++ - 将无符号字符读入字符串

c - 数组与 memcpy 比较 vs 逐元素比较