如何将有符号字符初始化为无符号值,如c++中的0xFF

How to initialize a signed char to unsigned values like 0xFF in C++?

本文关键字:c++ 0xFF 中的 无符号 初始化 符号 字符      更新时间:2023-10-16

在某些情况下,字节数组在库中使用char类型实现,对于许多编译器来说,char类型是有符号类型。

是否有一个简单的,可读的和正确的方式来初始化一个有符号字符的十六进制值大于127,不大于255?

目前我得到了以下内容,我一直在想一定有更简单的东西:

const unsigned char ff_unsigned = 0xff;
const char ff_signed = static_cast<const char>(ff_unsigned);

我想要一个没有警告的解决方案,即使使用比默认值更高的编译器警告级别。

下面的解决方案,例如创建C4310: cast截断常量值与MSVC 2013:

const char ff_signed = char(0xff);

有。使用以x为前缀的单引号字符。表示十六进制文字char类型。

例如:'xff' .

但请注意,char可以有符号或无符号,直到c++ 11,它甚至可以是1的补符号类型

const char ff_unsigned = 'xff';

0xff是整型,'xff'是字符。你可以使用

const char ff_signed = (char)0xff;

const char ff_signed = 'xff';