如何从字符中读取ASCII值并将其转换为十六进制格式的字符串



需要读取字符的值为数字,并为此找到相应的十六进制值。

#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)。从那里开始,您对较大类型进行哪种转换都会保持负数。

充分了解为什么您必须知道两者的补充是如何工作的。

基本上,-59192具有相同的二进制表示:1100 0101,具体取决于以一种或另一种方式解释的数据类型。当您使用十六进制格式打印它时,二进制表示(存储在内存中的实际值)是使用的,生产C5

char转换为short/unsigned short时,它将-59转换为short/unsigned short表示,即两种情况下的1111 1111 1100 0101FFC5)。

正确的方法是将初始值(197)存储到一个可以从一开始就可以表示数据类型(unsigned charshortunsigned short,...)的变量。

最新更新