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

时间:2017-11-28 10:17:40

标签: c++ char hex ascii stringstream

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

#include <iostream>
#include <iomanip>
using namespace std;
int main() {
    char c = 197;
    cout << hex << uppercase << setw(2) << setfill('0') << (short)c << endl;
}

输出:

  

FFC5

预期产出:

  

C5

1 个答案:

答案 0 :(得分:2)

问题在于,当您使用char c = 197时,您会溢出char类型,产生一个负数(-59)。从那里开始,你对更大类型的转换并不重要,它仍然是一个负数。

完全理解为什么你必须知道two's complement如何运作。

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

char转换为short / unsigned short后,它会将-59转换为short / unsigned short表示,这两种情况都是1111 1111 1100 0101FFC5)。

执行此操作的正确方法是将初始值(197)存储到数据类型能够表示的变量中unsigned charshort,{{1从一开始就是。),