【发布时间】:2022-01-11 14:40:00
【问题描述】:
我正在尝试将签名的字符重定向到 cout。感谢How to output a character as an integer through cout?,它在 Windows/VS2019 下运行良好。
但是,在使用 CLang 编译的 Android 下,它的行为与预期不同。
代码如下:
char c = -1;
std::cout << "c signed is " << signed(c) << std::endl;
std::cout << "+c is " << +c << std::endl;
在 Windows 下,我得到了预期的输出:
c signed is -1
+c is -1
在 Android 下,我得到了预期的输出:
c signed is 255
+c is 255
哪些可移植代码有助于在所有平台上显示“-1”?
【问题讨论】:
-
如果
char是有符号或无符号的,则定义它的实现。在您的计算机上,它似乎已签名,而在 Android 上,它似乎未签名。如果您想要一个显式有符号的 8 位整数,请使用int8_t。 -
谢谢,我会试试并告诉你
-
请注意
signed()转换为signed int,而不是signed char。signed int可以同时保存255和-1,因此您将始终看到真正存储在char中的值。尝试static_cast<signed char>(c)以始终看到-1。