Как добавить перечисление, представленное серией шестнадцатеричных значений, в QByteArray? - PullRequest
0 голосов
/ 24 августа 2018

У меня есть некоторые перечисления, которые представлены сериями шестнадцатеричных значений следующим образом:

enum someEnum
{
    NameA = 0x2121,
    NameB = 0x2223,
    NameC = 0x2020
};

Я хочу добавить одно из этих перечислений в QByteArray следующим образом:

QByteArray anArray;
anArray.append(NameA);

Но при таком подходе выдается предупреждение

implicit conversion from 'int' to 'char' changes value from 8481 to 33.

На самом деле, даже если я делаю следующее:

anArray.append(static_cast<char>(NameA));

, оно добавляет только 0x21 (в десятичном формате 33).

Я также пытался сделать следующее:

const char * t = reinterpret_cast<char*>(NameA);
anArray.append(t, sizeof(t));

, но это приводит к ошибке сегментации.

Конечно, я мог бы сделать следующее без потери значения или сбояили любая другая проблема:

anArray.append(0x21);
anArray.append(0x21);

Но я не хочу этого, я хочу напрямую добавить перечисление.Не могли бы вы предложить правильный способ сделать это?

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Используйте следующий код

QByteArray byteArray;
// this will store the integer as a hex value
byteArray.append(QByteArray::number(NameA, 16));
// this will store the integer as a base 10 value
byteArray.append(QByteArray::number(NameA));
0 голосов
/ 24 августа 2018

Возможно, вы можете использовать QDataStream:

QByteArray byteArray;
QDataStream dataStream(&byteArray, QIODevice::WriteOnly);

dataStream << NameA;

Извините, но сейчас у меня нет qt, и я не могу это проверить

...