C++ 十六进制到十进制,字符给出奇怪的结果?
我遇到了一个非常奇怪的问题。我想我错过了一些基本的东西。当我这样做时:C++ 十六进制到十进制,字符给出奇怪的结果?,c++,c,C++,C,我遇到了一个非常奇怪的问题。我想我错过了一些基本的东西。当我这样做时: char buffer[1] = {0xA0}; int value=0; value = (int)buffer[0]; printf("Array : %d\n",value); 我得到的结果是-96,这是不应该发生的。它应该给我160,因为十六进制数字0xA0在十进制中表示160。当我在缓冲区中放入小值(如0x1F)时,它工作正常。 有人能告诉我这里缺少了什么吗?char签名为128
char buffer[1] = {0xA0};
int value=0;
value = (int)buffer[0];
printf("Array : %d\n",value);
我得到的结果是-96,这是不应该发生的。它应该给我160,因为十六进制数字0xA0在十进制中表示160。当我在缓冲区中放入小值(如0x1F)时,它工作正常。
有人能告诉我这里缺少了什么吗?
char
签名为128到127
将缓冲区
声明为无符号字符
或强制转换为无符号字符
:
char buffer[1] = {0xA0};
int value=0;
value = (unsigned char)buffer[0];
printf("Array : %d\n",value);
char
已签名-128到127
将缓冲区
声明为无符号字符
或强制转换为无符号字符
:
char buffer[1] = {0xA0};
int value=0;
value = (unsigned char)buffer[0];
printf("Array : %d\n",value);
0xA0==-96
作为8位有符号值。0xA0==-96
作为8位有符号值。如果我想要160,但我必须使用char。有解决办法吗?@UnderDog转换为unsigned char,然后是int,也许?实际上有解决办法。如果我制作未签名字符,它就像一个符咒#刚刚注意到在这台机器上签名的char确实是问题的根源。然而,这个答案错误地表明,情况总是这样。你真是个笑料桶,不是吗?正如您所说,它依赖于实现,在本例中,这是正确的答案。如果我想要160,但我必须使用char。有解决办法吗?@UnderDog转换为unsigned char,然后是int,也许?实际上有解决办法。如果我制作未签名字符,它就像一个符咒#刚刚注意到在这台机器上签名的char确实是问题的根源。然而,这个答案错误地表明,情况总是这样。你真是个笑料桶,不是吗?正如您所说,它依赖于实现,在本例中,这是正确的答案。