有没有更短的方法来初始化 QByteArray?

新手上路,请多包涵

在我的程序中,我经常使用串行通信,因此经常使用 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 可能适合 - 但是 charQByteArray 构造函数所要求的。

这是正在使用的 QByteArray 构造函数:

QByteArray::QByteArray(const char *data, int size = -1)

原文由 DBedrenko 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 776
2 个回答

受到上述答案的启发,我最终想到了:

 const quint8 testData[] {0xB1, 0x00, 0xB2, 0x00};
const QCanBusFrame cFrame = QCanBusFrame(
    0xA1, QByteArray(reinterpret_cast<const char*>(testData), sizeof(testData)));

在使用串行通信时,我更喜欢将字节作为字节数而不是文字字符。

在讨论了 ##c++ 之后,我被告知 reinterpret_cast 适用于这种情况。

原文由 DBedrenko 发布,翻译遵循 CC BY-SA 3.0 许可协议

简单有效:

 QByteArray b = QByteArrayLiteral("\x12\x00\xa4\x42\x51\x00\x00\x99");

原文由 peppe 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题