[英]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.