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

How to read ASCII value from a character and convert it into hexadecimal formatted string

需要将字符的值读取为数字并找到对应的十六进制值。

#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)。从那里开始,无论您对更大的类型进行何种转换,它都将保持为负数。

要完全理解为什么您必须了解 two's complement 的工作原理。

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

char 转换为 short/unsigned short 时,它正在将 -59 转换为其 short/unsigned short表示,这两种情况都是 1111 1111 1100 0101 (FFC5)。

正确的做法是将初始值 (197) 存储到数据类型能够表示它的变量中 (unsigned char, short, unsigned short, ...) 从头开始​​。