十六进制到十进制与char给出奇怪的结果?

San*_*996 0 c c++

我遇到了一个非常奇怪的问题.我想我在这里遗漏了一些非常基本的东西.当我这样做:

    char buffer[1] = {0xA0};
    int value=0;
    value = (int)buffer[0];
    printf("Array : %d\n",value); 
Run Code Online (Sandbox Code Playgroud)

我得到结果为-96,这不应该发生.它应该给我160,因为十六进制数0xA0表示十进制160.当我在缓冲区(如0x1F)中放入小值时,它可以正常工作.谁能告诉我,我在这里失踪了什么?

Mit*_*eat 5

char 签署-128到127

声明bufferunsigned char或转为unsigned char:

char buffer[1] = {0xA0};
int value=0;
value = (unsigned char)buffer[0];
printf("Array : %d\n",value); 
Run Code Online (Sandbox Code Playgroud)