【发布时间】:2016-08-25 12:47:15
【问题描述】:
如果我运行这段代码:
std::cout << static_cast<uint8_t>(65);
它会输出:
一个
这是数字 65 的 ASCII 等价物。
这是因为uint8_t 被简单定义为:
typedef unsigned char uint8_t;
这种行为是标准吗?
不应该是更好的方法来定义
uint8_t,保证被处理为数字而不是字符?
我无法理解如果我想打印uint8_t 变量的值,它将被打印为字符的逻辑。
附:我正在使用 MSVS 2013。
【问题讨论】:
-
是的,这是标准行为。如果您想使用
uint8_t作为一个小的无符号整数,您需要在输出之前对其进行转换。就像例如static_cast<uint32_t>(some_uint8_t_variable) -
谢谢..它没有完全复制..我知道为什么会存在这种行为。我的主要两个问题是:这是否是一种标准行为以及为什么没有更好的方法将 uint8_t 表示为非字符类型。
-
@HumamHelfawi - 没有大小为 1 且不是
char的变体的原始类型。是的,C++ 可以添加一个新类型,但这会与 C 冲突,而 C 正是这些 typedef 的起源。 -
std::cout << +static_cast<uint8_t>(65);会做你想做的事。 -
+是一个一元运算符,其作用与一元-非常相似,只是它不否定值。它通常被视为毫无意义,但它在这里很有用,因为作为算术运算符,编译器将其参数提升为int。所以+x等价于(int)x。
标签: c++ c++11 language-lawyer cout fixed-size-types