作者:璋-华_135 | 来源:互联网 | 2022-10-22 06:02
考虑如下代码:
#include
#include
int main()
{
std::stringstream ss;
ss <<"a0 b1";
uint8_t byte;
ss >> std::hex >> byte;
std::cout <
为什么这个输出a
,而不是a0
即使a0
装配在uint8_t
十六进制?
1> Lightness Ra..:
因为uint8_t
也是(可能)unsigned char
,所以当您从C ++流执行格式化提取时,存在特殊规则。
不幸的是,这只是一个别名,而不是唯一的类型。
基本上,它跳过了“词法转换为数字”步骤,因为它认为您想提取一个字符。人物'a'
。
我认为,unsigned int
如果需要,您将需要阅读然后缩小的文档。
如果确实减小到a uint8_t
,那么出于同样的原因,还必须将其提升回更大的int(lol),以触发序列化。
(现场演示)
老实说,在处理流时,我只会避免使用较小的固定宽度类型(除非您使用read()
和进行无格式的处理write()
)。忘记这个问题太容易了。
@Brandon一元加号运算符使uint8_t操作数提升为int,这成为表达式结果的类型。