比较unsigned char和signed char

时间:2017-03-11 18:23:30

标签: c++

我有一个unsigned char数组和一个只有char的数组。我想比较两者,看看它们是否相同。有时即使比特相同,比较也会失败。

我知道我可以使用memcmp(),但我只是对如何手动操作感到好奇。

char* arr1;
unsigned char* arr2;
...
if (arr1[i] != arr2[i]) { //move zero extend vs move sign extend
        std::bitset<8> x(arr1[i]);
        std::bitset<8> y(arr2[i]);

        std::cout << x << " " << y << std::endl; //The bits are the same.
}

即使char值可能相同,比较也会说它们是不同的,因为arr1使用movzx移动到寄存器中(移动零扩展),而arr2使用a移动到寄存器中movsx(移动符号扩展)。

这会导致数字出现问题,例如0x90,其中最重要的位是1。因此,movsx 32位寄存器将导致值0xFFFFFF90,而movzx将导致值0x90,而cmp指令将表示它们不同。

1 个答案:

答案 0 :(得分:1)

好吧,你只需要在比较时将它们都投射到(char)