【发布时间】:2016-07-19 13:09:36
【问题描述】:
在我的程序中,我经常使用串行通信,因此经常使用QByteArray。
我想知道是否有比以下更短的方法来初始化具有特定字节的QByteArray:
const char test_data[] = {
static_cast<char>(0xB1), static_cast<char>(0xB2),
0x5, static_cast<char>(0xFF),
static_cast<char>(0xEE), static_cast<char>(0xEE),
static_cast<char>(0x0)}; // Note QByteArray should be able to hold 0 byte
const QCanBusFrame frame = QCanBusFrame(0xA1, QByteArray(test_data));
static_cast<char> 是必需的,因为否则 C++11 会给出关于缩小的错误,因为 0x7F 到 0xFF 的范围大于 char 可以容纳的范围——但 char 是 QByteArray 构造函数要求。
这是正在使用的QByteArray 构造函数:
QByteArray::QByteArray(const char *data, int size = -1)
【问题讨论】:
-
当您将
test_data声明为无符号字符数组 (unsigned char*) 然后将其转换为字符数组 (char*) 时会发生什么? -
@OnurA 您确定需要使用星号吗?初始化
test_data的行抛出“从 'int' 到 'const unsigned char* 的无效转换” -
您可以轻松创建一个函数,该函数使用您想要的参数创建
QByteArray。 -
你的任何字节值可以是 0x00 - 如果不是,你可以使用带有字符串文字的 const char* 构造函数
-
@Jimmy 你说得对,可以将 "\x01\xB2\xB4" 传递给构造函数,但使用整数要好得多(你可以使用常量名等) .不过我应该可以有一个“0”字节......
标签: c++ qt c++11 qbytearray qt5.6