如何将已签名的char初始化为C++中的0xFF等无符号值?

Fou*_*Two 0 c++

在某些情况下,使用char类型在库中实现字节数组,这是许多编译器的签名类型.

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

目前我最终得到以下内容,我一直认为必须有一些更简单的东西:

const unsigned char ff_unsigned = 0xff;
const char ff_signed = static_cast<const char>(ff_unsigned);
Run Code Online (Sandbox Code Playgroud)

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

以下解决方案例如创建C4310:使用MSVC 2013生成截断常量值:

const char ff_signed = char(0xff);
Run Code Online (Sandbox Code Playgroud)

Bat*_*eba 5

就在这里.使用单引号字符\x作为前缀.这表示十六进制文字char类型.

例如:'\xff'.

但请注意,char可以签名或未签名,直到并包括C++ 11,它甚至可以是1的补码签名类型.