Seite 1 von 1

[gelöst]QByteArray auslesen

Verfasst: 28. Juli 2014 10:38
von meinhana
Hallo Leute,

ich steh total auf dem Schlauch...

Ich habe eine QByteArray, dieses Array möchte ich auslesen, oder besser gesagt,
ich möchte jeweiles 2Byte in eine/mehrere Variable/n schreiben..
Also händisch irgendwie so -

Code: Alles auswählen

int hoehe = array[41] & array[42]; 

Mir ist klar das ich dafür eine Schleife benötige, aber ich komm einfach nicht drauf wie ich das man besten realisiere... :oops:

Re: QByteArray auslesen

Verfasst: 28. Juli 2014 19:14
von Christian81
Du musst schon wissen wie die Daten aus den QByteArray drin stehen um sie korrekt auszulesen. Wenn in 41 die höherwertigen Bits und in 42 die niederwertigen Bits stehen dann kannst Du es z.B. so machen:

Code: Alles auswählen

unsigned int a = ba[41];
unsigned int b = ba[42];
unsigned int c = a >> 8 + b;

Re: QByteArray auslesen

Verfasst: 29. Juli 2014 10:35
von meinhana
Habe mich damit ein bisschen auseinander gesetzt und es wie folgt gelöst..

Code: Alles auswählen

	
union con
{
	byte byte_array[2];
	unsigned short _short;
};

con c;
	c.byte_array[0] = size1;
	c.byte_array[1] = size2;

	int groesse = c._short;


Nun ist meine Frage -> Ich habe nun im Array[55] ja 1 Byte drinne stehen, aber ich brauche 4 Bit,
wie bekomme ich nur die 4 Bit?

Re: QByteArray auslesen

Verfasst: 4. August 2014 11:04
von meinhana
...
Nun da mir niemand geantwortet hat, habe ich gesucht und gefunden :P

Code: Alles auswählen

		byte h = b & 0xf;
		byte l = (b > 4) & 0xf;

Re: [gelöst]QByteArray auslesen

Verfasst: 3. April 2015 13:30
von alainstgt
am elegantesten geht es mit einem Zeiger:

Code: Alles auswählen

QByteArray myArray;
// myArray füllen ...
qint16* p = myArray.data();
for ( int i = 0; i <= myArray.count() / sizeof( p[0] ); ++i )
    qDebug() << "p[" << i << "] =" << p[i];
benutze eventuell die Funktion qToLittleEndian() bzw. verwandte Funktionen.

Re: [gelöst]QByteArray auslesen

Verfasst: 3. April 2015 20:02
von Christian81
alainstgt hat geschrieben:am elegantesten geht es mit einem Zeiger:

Code: Alles auswählen

QByteArray myArray;
// myArray füllen ...
qint16* p = myArray.data();
for ( int i = 0; i <= myArray.count() / sizeof( p[0] ); ++i )
    qDebug() << "p[" << i << "] =" << p[i];
Na das würde ich mir nochmal überlegen ob da das rauskommt was rauskommen soll. Vom Out-Of-Bounds Zugriff bei i == myArray.count() / sizeof(p[0]) mal ganz abgesehen...