[gelöst]QByteArray umwandeln
-
Hallo Leute,
folgends Problemchen, ich habe ein QByteArray mit dem Inhalt
"0000000ff04f2002100050064010a6" usw.
Ich brauche aber kein Hex sondern Dezimal.Dezimal brauche ich dafür um an eine bestimmte Stelle in der Datei zu kommen, sagen wir mal nach 26 Bytes soll er anfangen zu lesen.
Die Datei behinhaltet keine normalen zeichen, sondern nun ja so was wie "[NUL]" und "[DC4]".Oder denke ich da zu kompliziert?
Gibt es da eine andere Möglichkeit?Ich hoffe ich habe an der richtigen Stelle gepostet...
-
Ein QByteArray enthält, wie der Name schon sagt, Bytes. Die enthalten Bits und das ist Binär und nicht Hexadezimal.
QByteArray hat diverse Konvertierungsfunktionen, unter anderem toInt. Doku lesen!
-
Achso, ich war leider ein bisschen durcheinander,
ich bräuchte eigentlich gar keine umwandlung, weil so wie ich das verstanden habe,(habe eben im Netz bisschen gelesen)
das mit dem toInt etc. nur die anzeige verändert wird?
Das heißt in meinem QByteArray steht alles drin was ich brauche, auch wenn es der Compiler nicht richtig anzeigt?
-
Ich hätte noch eine Frage..
if(file.isOpen()) { QByteArray line = file.readAll(); qDebug() << line.toHex(); } else { qDebug() << "file not open"; }
ich möchte jetzt line[37] ausgeben, wenn ich einfach schreibe
qDebug() << line[37];
Schreibt er mir " *leerzeichen*
Gibt es eine möglichkeit es anzeigen zu lassen?
-
Was willst du denn ausgegeben haben?
dein line[37] liefert die das 38. char aus deinem Array. Wenn du daraus ein int machen willst musst du halt casten.
Schau nauch mal in die Docu zu QByteArray
http://qt-project.org/doc/qt-4.8/qbytearray.html
-
Das ich das casten muss, ist mir bewusst, habe es so versucht ->
qDebug() << QString::number(line[37]).toInt(); qDebug() << QString::number(line[38]).toInt(); qDebug() << QString::number(line[0]).toInt(); qDebug() << QString::number(line[1]).toInt();
Bei line[0] und line[1] gibt er mir den Ascii wert 118(v) und 119(w),
das ist schon ganz richtig, aber bei allem was danach kommt nur eine "0",
dabei müsste er mir doch irgendwas anderes ausgeben, da mein QByteArray z.B. an der Stelle 37 eine "2" steht...
So sagt es mir zumindet der Compiler wenn ich schreibe line.toHex();
-
Das ist aber eine sehr merkwürdige Umwandlung die du da machst.
Du wandelst das char über number in einen QString um und dann von dort das Ganze in int. QString::number hat ja keine Überladung für char also wird da wahrscheinlich die für int verwendet.
Machs doch einfach soqDebug() << int(line[37]);
-
Habs jetzt mal so probiert wie du es vorgeschlagen hast,
bekomme aber trotzdem noch "0" raus..
-
meinhana schrieb:
da mein QByteArray z.B. an der Stelle 37 eine "2" steht...
Du weißt aber schon, dass [37] auf das 38. Element zugreift, oder?
-
@ oenone
Ja das weiß ich
-
Ohne deine Datei zu kennen kann man jetzt nicht mehr groß helfen.
-
Naja wie gesagt, die Datei fängt mit "vwm_" an
und danach kommen halt nur so Sachen wie [NUL],[EOT],[DC4](in schwarz hinterlegt)
Ich kann das hier nicht einfügen...Habe schon versucht die Kodierung im Notepad++ zu ändern, bringt aber alles nix
-
Oh Mein Gott, ich bin so doof!
Habe mir eben einen Hex Editor downgeloadet und herrausgefunden,
dass die Daten die ich brauche gar nicht auf Stelle 37 & 38 sind,
sondern auf Stelle 41 & 42 ...
Jetzt gibt er mir auch was vernümftiges aus ...Danke an alle die mir helfen wollten