我在一个架构上,默认情况下将char
解释为signed
。
i构造了与QbbyTearray QT5文档中提到的char array
:
const char char_buffer[] = {
0xFF, 0x00, 0x03
};
当我稍后分别致电QByteArray::fromRawData(char_buffer)
QByteArray(char_buffer)
时,编译器将抱怨:
error: narrowing conversion of ‘255’ from ‘int’ to ‘char’ inside { } [-Wnarrowing]
(fromRawData()
没有unsigned char *
参数过载)
解决方案:
每当我必须与一个内置功能之一互动时,我都会施放unsigned char *
。
const char uchar_buffer[] = {
0xFF, 0x00, 0x03
};
QByteArray::fromRawData(reinterpret_cast<const char*>(uchar_buffer), sizeof(uchar_buffer))
问题:
我是否监督了任何更轻松/直截了当的解决方案,而无需施放(并保留缩小警告)?
每当与QT函数互动期望char *
时,铸造unsigned char *
的解决方案是可以的。
替代品
使用编译器标志-funsigned-char
使编译器默认使用unsigned char
。
使用.pro:
QMAKE_CXXFLAGS += -funsigned-char
与Cmake:
set( CMAKE_CXX_FLAGS "-funsigned-char")
适当的解决方案
最初的问题是如何初始化char_buffer
。整数文字(例如0xff)来自类型整数。最好首先使用角色文字,例如,
const char char_buffer[] = {
'xFF', 'x00', 'x03'
};