繁体   English   中英

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

4 J

34 4a

4

当我们改变时将第一行替换为:

uint16_t x = 0, y = 0x4a;

输出变成:

74 74

74 74

4a 4a

Ĵ

我想我明白会发生什么,但我不明白为什么会发生,或者我怎么能阻止它/解决它。 根据我的理解, std::hex修饰符因为x的类型而在某种程度上被破坏,在技术层面可能不完全正确,但它只是写入它读取的第一个字符。

背景:输入应该是一串十六进制数字,每对代表一个字节(就像一个位图,除了字符串)。 我希望能够读取每个字节并将其存储在uint8_t所以当我遇到这个问题时我正在试验它。 我仍然无法确定什么是最好的方法,所以如果你认为我正在做的是低效或不必要的我会很高兴知道为什么。 谢谢你的阅读,

ss >> x

将uint8_t x视为unsigned char。 '4'的ascii值是(十进制)52。它将字符串“4a”的第一个字符读取到x中,好像x是一个字符。 当你将它切换到uint16_t时,它将它视为无符号短整数类型。 与y相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM