考虑如下代码:
#include <iostream>
#include <sstream>
int main()
{
std::stringstream ss;
ss << "a0 b1";
uint8_t byte;
ss >> std::hex >> byte;
std::cout << std::hex << byte << std::endl;
return 0;
}
为什么即使a
符合a0
的十六进制形式,也输出a0
而不是uint8_t
答案 0 :(得分:12)
由于uint8_t
也可能是unsigned char
,因此从C ++流执行格式化提取时,'a'
也为此special rules exist。
很遗憾,this is just an alias, not a distinct type。
基本上,它跳过了“词法转换为数字”步骤,因为它认为您想提取一个字符。字符unsigned int
。
我认为您需要读入uint8_t
,然后根据需要缩小尺寸。
如果您确实缩小到read()
,还必须将其提升到much the same reason更大的整数(lol),以触发序列化。
说实话,在处理流时,我只会避免使用较小的固定宽度类型(除非您对write()
和{{1}}做无格式的工作)。忘记这个问题太容易了。