需要读取字符的值为数字,并为此找到相应的十六进制值。
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
char c = 197;
cout << hex << uppercase << setw(2) << setfill('0') << (short)c << endl;
}
输出:
ffc5
预期输出:
c5
问题是,当您使用char c = 197
时,您正在溢出char
类型,产生负数(-59
)。从那里开始,您对较大类型进行哪种转换都会保持负数。
充分了解为什么您必须知道两者的补充是如何工作的。
基本上,-59
和192
具有相同的二进制表示:1100 0101
,具体取决于以一种或另一种方式解释的数据类型。当您使用十六进制格式打印它时,二进制表示(存储在内存中的实际值)是使用的,生产C5
。
当char
转换为short
/unsigned short
时,它将-59
转换为short
/unsigned short
表示,即两种情况下的1111 1111 1100 0101
(FFC5
)。
正确的方法是将初始值(197
)存储到一个可以从一开始就可以表示数据类型(unsigned char
,short
,unsigned short
,...)的变量。