Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 十六进制到十进制,字符给出奇怪的结果?_C++_C - Fatal编程技术网

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确实是问题的根源。然而,这个答案错误地表明,情况总是这样。你真是个笑料桶,不是吗?正如您所说,它依赖于实现,在本例中,这是正确的答案。