考虑如下代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
为什么这个输出a,而不是a0即使a0装配在uint8_t十六进制?
Lig*_*ica 12
因为uint8_t也是(可能)unsigned char,所以当您从C ++流执行格式化提取时,存在特殊规则。
不幸的是,这只是一个别名,而不是唯一的类型。
基本上,它跳过了“词法转换为数字”步骤,因为它认为您想提取一个字符。人物'a'。
我认为,unsigned int如果需要,您将需要阅读然后缩小的文档。
如果确实减小到a uint8_t,那么出于同样的原因,还必须将其提升回更大的int(lol),以触发序列化。
老实说,在处理流时,我只会避免使用较小的固定宽度类型(除非您使用read()和进行无格式的处理write())。忘记这个问题太容易了。