stringstream >> uint8_t 十六进制? C++
stringstream >> uint8_t in hex? c++
我对以下代码的输出感到困惑:
uint8_t x = 0, y = 0x4a;
std::stringstream ss;
std::string a = "4a";
ss << std::hex << a;
ss >> x;
std::cout << (int)x << " "<< (int)y << std::endl;
std::cout << x << " "<< y <<std::endl;
std::cout << std::hex << (int)x << " " << (int)y << std::endl;
uint8_t z(x);
std::cout << z;
上面的输出是:
52 74
4J
34 4a
4
当我们更改时,将第一行替换为:
uint16_t x = 0, y = 0x4a;
输出变成:
74 74
74 74
4a 4a
J
我想我明白会发生什么,但我不明白为什么会发生或我如何防止 it/work 发生。根据我的理解,由于 x
的类型,std::hex
修饰符在某种程度上被破坏了,在技术层面上可能并不完全正确,但它只是简单地写下它读取的第一个字符。
背景:输入应该是一串十六进制数字,每一对代表一个字节(就像位图,除了字符串)。我希望能够读取每个字节并将其存储在 uint8_t
中,所以当我遇到这个问题时我正在试验它。我仍然无法确定最好的方法是什么,所以如果您认为我正在做的事情效率低下或没有必要,我将不胜感激知道原因。感谢您的阅读,
ss >> x
将 uint8_t x 视为无符号字符。 '4' 的 ascii 值为(十进制)52。它将字符串“4a”的第一个字符读取到 x 中,就好像 x 是一个字符一样。当您将其切换为 uint16_t 时,它会将其视为无符号短整数类型。与y相同。
我对以下代码的输出感到困惑:
uint8_t x = 0, y = 0x4a;
std::stringstream ss;
std::string a = "4a";
ss << std::hex << a;
ss >> x;
std::cout << (int)x << " "<< (int)y << std::endl;
std::cout << x << " "<< y <<std::endl;
std::cout << std::hex << (int)x << " " << (int)y << std::endl;
uint8_t z(x);
std::cout << z;
上面的输出是:
52 74
4J
34 4a
4
当我们更改时,将第一行替换为:
uint16_t x = 0, y = 0x4a;
输出变成:
74 74
74 74
4a 4a
J
我想我明白会发生什么,但我不明白为什么会发生或我如何防止 it/work 发生。根据我的理解,由于 x
的类型,std::hex
修饰符在某种程度上被破坏了,在技术层面上可能并不完全正确,但它只是简单地写下它读取的第一个字符。
背景:输入应该是一串十六进制数字,每一对代表一个字节(就像位图,除了字符串)。我希望能够读取每个字节并将其存储在 uint8_t
中,所以当我遇到这个问题时我正在试验它。我仍然无法确定最好的方法是什么,所以如果您认为我正在做的事情效率低下或没有必要,我将不胜感激知道原因。感谢您的阅读,
ss >> x
将 uint8_t x 视为无符号字符。 '4' 的 ascii 值为(十进制)52。它将字符串“4a”的第一个字符读取到 x 中,就好像 x 是一个字符一样。当您将其切换为 uint16_t 时,它会将其视为无符号短整数类型。与y相同。