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

Alles rund um die Programmierung mit Qt
Antworten
bobcat
Beiträge: 125
Registriert: 21. April 2010 14:51

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

Beitrag 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?
Zuletzt geändert von bobcat am 21. November 2016 18:20, insgesamt 1-mal geändert.
bobcat
Beiträge: 125
Registriert: 21. April 2010 14:51

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

Beitrag 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?
bobcat
Beiträge: 125
Registriert: 21. April 2010 14:51

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

Beitrag 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.
Antworten