初始化QByTearray避免[-wnarrow]

Initialize QByteArray avoiding [-Wnarrowing]

本文关键字:-wnarrow 避免 QByTearray 初始化      更新时间:2023-10-16

我在一个架构上,默认情况下将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'
};