Seite 1 von 1

[gelöst] int Wert als little-endian hex codiert in ein QByteArray verpacken

Verfasst: 21. November 2016 09:34
von bobcat
Ich möchte einen int Wert mit einer vorgegebenen Byte-Länge codiert als little endian in ein QByteArray verpacken. Mag sein, dass ich in der umfangreichen Schnittstelle von QByteArray die Methode übersehen habe, mit der sowas einfach geht ...

Damit klarer wird, was ich eigentlich meine, hier ein Beispiel:

int Wert (als Dezimalzahl geschrieben): 724
Byte-Länge: 4
Entsprechender Hex-Wert: 0x02D4

Als Ergebnis möchte ich ein QByteArray der Länge 4 mit dem Inhalt:
ba[0] = 0xD4
ba[1] = 0x02
ba[2] = 0x00
ba[3] = 0x00

Hat jemand eine Idee?

Re: int Wert als little-endian hex codiert in ein QByteArray verpacken

Verfasst: 21. November 2016 11:53
von bobcat
Ich hab's jetzt folgendermaßen gelöst. Der Codeschnipsel wandelt den int in die einzelnen Bytes der Hex-Darstellung um (das eigentliche Problem). Padden und das Array umdrehen ist dann einfacher Qt Standard.

Code: Alles auswählen

int value = 724;
QByteArray hexValue;
hexValue = QByteArray::fromHex(QString::number(value, 16).toUtf8());
// Jetzt ist
// hexValue.at(0) == 0x02
// hexValue.at(1) == 0xD4
Kann jemand kommentieren, ob das effizient ist?

Re: int Wert als little-endian hex codiert in ein QByteArray verpacken

Verfasst: 21. November 2016 18:20
von bobcat
Oder folgendes machen:

Code: Alles auswählen

int value = 724;
qint8* pValue = (qint8*)(&value);
QByteArray hexValue;
// für int32 Werte: 4 Bytes
for (int i = 0; i < 4; i++)
    hexValue[i] = *(pValue+i);
Das setzt voraus, dass der int in lokalen Architektur als little endian gespeichert wird.