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?
[gelöst] int Wert als little-endian hex codiert in ein QByteArray verpacken
[gelöst] int Wert als little-endian hex codiert in ein QByteArray verpacken
Zuletzt geändert von bobcat am 21. November 2016 18:20, insgesamt 1-mal geändert.
Re: int Wert als little-endian hex codiert in ein QByteArray verpacken
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.
Kann jemand kommentieren, ob das effizient ist?
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
Re: int Wert als little-endian hex codiert in ein QByteArray verpacken
Oder folgendes machen:
Das setzt voraus, dass der int in lokalen Architektur als little endian gespeichert wird.
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);