【问题标题】:How to print signed char to cout as number under Android如何在Android下将签名字符打印为数字
【发布时间】: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 charsigned int 可以同时保存255-1,因此您将始终看到真正存储在char 中的值。尝试static_cast&lt;signed char&gt;(c) 以始终看到-1

标签: android c++ cout


【解决方案1】:

正如 Yksisarvinen一些程序员老兄Sander De Dycker 所评论的,问题不在于 c 的重定向方式到流,但更多来自c 的类型本身。如果您希望变量被签名,则应避免使用char,因为char 不一定是签名的。

问题已通过使用int8_tsigned char 而不是char 得到解决。

【讨论】:

    猜你喜欢
    • 2011-10-04
    • 2016-05-07
    • 2010-10-19
    • 2023-03-18
    • 2012-06-12
    • 2017-04-14
    • 2011-01-24
    • 1970-01-01
    相关资源
    最近更新 更多