需要将字符值作为数字读取并找到相应的十六进制值。
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
char c = 197;
cout << hex << uppercase << setw(2) << setfill('0') << (short)c << endl;
}
输出:
FFC5
预期产出:
C5
答案 0 :(得分:2)
问题在于,当您使用char c = 197
时,您会溢出char
类型,产生一个负数(-59
)。从那里开始,你对更大类型的转换并不重要,它仍然是一个负数。
完全理解为什么你必须知道two's complement如何运作。
基本上,-59
和192
具有相同的二进制表示形式:1100 0101
,具体取决于以某种方式解释的数据类型。当您使用十六进制格式打印时,二进制表示(存储在内存中的实际值)是使用的,生成C5
。
当char
转换为short
/ unsigned short
后,它会将-59
转换为short
/ unsigned short
表示,这两种情况都是1111 1111 1100 0101
(FFC5
)。
执行此操作的正确方法是将初始值(197
)存储到数据类型能够表示的变量中unsigned char
,short
,{{1从一开始就是。),