LINUX.ORG.RU

Qt: QByteArray пропадают байты


0

1

у меня есть qbytearray preved; я пытаюсь добавить int medved = 5; в preved; но вместо того чтобы как принято записывать все 4 байта от инта он пишет один 05. вообщем как добавить инт в полный рост.

Ответ на: комментарий от arsi

if (datagram.contains(QByteArray::fromHex(«FFFFFFFF55»))) { QByteArray array; char null = 0; int amount = 5; array = QByteArray::fromHex(«FFFFFFFF44») + QByteArray::fromHex(«01») + QByteArray::fromHex(«00») + «value» + null; array += amount; array += QByteArray::fromHex(«E8D02C48»); sendPacket(array,address->toString(),port); }

preepunk ()
Ответ на: комментарий от preepunk

> не я уже все пишу как есть

ссзб.

> а солюшн какой нибудь для этого точно есть

QByteArray array;
QDataStream ds(&array, QIODevice::WriteOnly);
ds.setByteOrder(QDataStream::LittleEndian);
quint32 amount = 5;
ds << QByteArray::fromHex("FFFFFFFF44")
   << quint8(0x01)
   << quint8(0x00)
   << "value"
   << quint8(0)
   << amount
   << quint32(0xE8D02C48);

(или как-то так.)

arsi ★★★★★ ()
Ответ на: комментарий от preepunk

ах да, QByteArray сериализируется как длина (quint32) + данные. записывай либо как числа:

ds << quint32(0xFFFFFFFF) << quint8(0x44);
либо как «сырые» данные:
ds.writeRawData(QByteArray::fromHex("FFFFFFFF44").data(), 5);

arsi ★★★★★ ()

Зачем так сложно ? Разве так не проще ?

#include <stdio.h>
#include <QtCore/QByteArray>

int main(int argc, char *argv[])
{
    unsigned num=5;
    QByteArray ba((char *)&num, sizeof(unsigned));
    printf("data is: '%s'\n", ba.toHex().constData());
}

Jetty ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.