繁体   English   中英

比较未签名的字符和签名的字符

[英]Comparing unsigned char with signed char

我有一个数组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使用movsx (移动符号扩展)移入寄存器。

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

好了,您只需要在比较时将它们都转换为(char)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM