[Solved]Convert ASCII hex to int
-
wrote on 6 Mar 2018, 13:12 last edited by
QString line="80: 1C 02 FC 85 FF 4F FF 1D 89 17 08 10 01 00 00 00 3B 87 69 00 82 00 48 09 88 10 00 00 "; QStringList fields=line.split(':'); qDebug()<<"en-tĂȘte:"<<fields[0]; QByteArray values=QByteArray::fromHex(fields[1].toLatin1()); qDebug()<<"data:"<<values;
en-tĂȘte: "80"
data :"\x1C\x02\xFC\x85\xFFO\xFF\x1D\x89\x17\b\x10\x01\x00\x00\x00;\x87i\x00\x82\x00H\t\x88\x10\x00\x00" -
wrote on 6 Mar 2018, 13:39 last edited by
heureka
VRonin's code works:
QVector()
"80: 1C 02 FC 85 FF 4F FF 1D 89 17 08 10 01 00 00 00 3B 87 69 00 82 00 48 09 88 10 00 00 "
4
QRegularExpressionMatch(Valid, has match: 0:(0, 3, "80:"), 1:(0, 2, "80"))
"1C" 28
"02" 2
"FC" 252
now I have to give eyh value to the different y
but I think I can gigure that out.@mpergand
this will divide first field from rest but how to divide the rest?
y1= field1,y2=field2 and so on
but I will test. -
wrote on 6 Mar 2018, 13:47 last edited by mpergand 3 Jun 2018, 13:47
@Leopold said in [Solved]Convert ASCII hex to int:
this will divide first field from rest but how to divide the rest?
y1= field1,y2=field2 and so on
but I will test.No need to split anything, you can access each byte in a QByteArray with at() or []
See the doc ... -
wrote on 6 Mar 2018, 21:18 last edited by
@VRonin
the example works great for transforming from hex to dec but i get the same row what i have in the txt now as a vektor. In my code you see that I have different y Vektors.
I need value of field1 in y1, field2 in y2 and so on.I can not figure out how to take the i into a loop with y(i). -
@VRonin
the example works great for transforming from hex to dec but i get the same row what i have in the txt now as a vektor. In my code you see that I have different y Vektors.
I need value of field1 in y1, field2 in y2 and so on.I can not figure out how to take the i into a loop with y(i). -
wrote on 7 Mar 2018, 08:33 last edited by
I tried this:
{ // iterate over all the matchesconst QRegularExpressionMatch hexMatch = i.next(); qDebug() << hexMatch.capturedRef(0) << hexMatch.capturedRef(0).toUInt(Q_NULLPTR,16); //capturedRef contains the part matched by the regular expression y1.append(hexMatch.capturedRef(1).toUInt(Q_NULLPTR,16)); y2.append(hexMatch.capturedRef(2).toUInt(Q_NULLPTR,16)); y3.append(hexMatch.capturedRef(3).toUInt(Q_NULLPTR,16)); y4.append(hexMatch.capturedRef(4).toUInt(Q_NULLPTR,16)); }
-
I tried this:
{ // iterate over all the matchesconst QRegularExpressionMatch hexMatch = i.next(); qDebug() << hexMatch.capturedRef(0) << hexMatch.capturedRef(0).toUInt(Q_NULLPTR,16); //capturedRef contains the part matched by the regular expression y1.append(hexMatch.capturedRef(1).toUInt(Q_NULLPTR,16)); y2.append(hexMatch.capturedRef(2).toUInt(Q_NULLPTR,16)); y3.append(hexMatch.capturedRef(3).toUInt(Q_NULLPTR,16)); y4.append(hexMatch.capturedRef(4).toUInt(Q_NULLPTR,16)); }
wrote on 7 Mar 2018, 09:07 last edited by@Leopold said in [Solved]Convert ASCII hex to int:
{ // iterate over all the matches
Look at that comment. Do you see what you are doing wrong?
-
wrote on 7 Mar 2018, 10:01 last edited by VRonin 3 Jul 2018, 10:03
yes I see that it is a loop but if i write :
if(eingangMatch.hasMatch()) { if(eingangMatch.capturedRef(1).compare("80",Qt::CaseInsensitive)==0) { // Eingang==("80:") qDebug() << eingangMatch; for(QRegularExpressionMatchIterator i = hexRegExp.globalMatch(line); i.hasNext(); ) const QRegularExpressionMatch hexMatch = i.next(); qDebug() << hexMatch.capturedRef(0).toUInt(Q_NULLPTR,16); //capturedRef contains the part matched by the regular expression y1.append(hexMatch.capturedRef(1).toUInt(Q_NULLPTR,16)); y2.append(hexMatch.capturedRef(2).toUInt(Q_NULLPTR,16)); y3.append(hexMatch.capturedRef(3).toUInt(Q_NULLPTR,16)); y4.append(hexMatch.capturedRef(4).toUInt(Q_NULLPTR,16)); }
the qDebug() << eingangMatch; and qDebug() << hexMatch.capturedRef(0).toUInt(Q_NULLPTR,16);
don't work and all my y vectors get "0"
"80: 1C 05 3A 85 FF 4F FF 1D 89 1E 08 10 01 00 00 00 3B 87 51 01 AF 00 58 09 88 10 00 00 "
QVector(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
QVector(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) -
yes I see that it is a loop but if i write :
if(eingangMatch.hasMatch()) { if(eingangMatch.capturedRef(1).compare("80",Qt::CaseInsensitive)==0) { // Eingang==("80:") qDebug() << eingangMatch; for(QRegularExpressionMatchIterator i = hexRegExp.globalMatch(line); i.hasNext(); ) const QRegularExpressionMatch hexMatch = i.next(); qDebug() << hexMatch.capturedRef(0).toUInt(Q_NULLPTR,16); //capturedRef contains the part matched by the regular expression y1.append(hexMatch.capturedRef(1).toUInt(Q_NULLPTR,16)); y2.append(hexMatch.capturedRef(2).toUInt(Q_NULLPTR,16)); y3.append(hexMatch.capturedRef(3).toUInt(Q_NULLPTR,16)); y4.append(hexMatch.capturedRef(4).toUInt(Q_NULLPTR,16)); }
the qDebug() << eingangMatch; and qDebug() << hexMatch.capturedRef(0).toUInt(Q_NULLPTR,16);
don't work and all my y vectors get "0"
"80: 1C 05 3A 85 FF 4F FF 1D 89 1E 08 10 01 00 00 00 3B 87 51 01 AF 00 58 09 88 10 00 00 "
QVector(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
QVector(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)wrote on 7 Mar 2018, 10:07 last edited by VRonin 3 Jul 2018, 11:07@Leopold said in [Solved]Convert ASCII hex to int:
yes I see that it is a loop
I don't think you do...
int h=0; for(QRegularExpressionMatchIterator i = hexRegExp.globalMatch(line);i.hasNext();++h){ const QRegularExpressionMatch hexMatch = i.next(); qDebug() << hexMatch.capturedRef(0).toUInt(Q_NULLPTR,16); switch(h){ case 1 : y1.append(hexMatch.capturedRef(0).toUInt(Q_NULLPTR,16)); break; case 2 : y2.append(hexMatch.capturedRef(0).toUInt(Q_NULLPTR,16)); break; case 3 : y3.append(hexMatch.capturedRef(0).toUInt(Q_NULLPTR,16)); break; case 4 : y4.append(hexMatch.capturedRef(0).toUInt(Q_NULLPTR,16)); break; default: break; } }
-
wrote on 7 Mar 2018, 10:44 last edited by
i get error for the "i" no match for operator "++"
and the switch operator is not an integer
I copied the int i=0 as well
btw:my compiler is mingw9-32 from QT 5.6.2 -
wrote on 7 Mar 2018, 10:53 last edited by
the i was occupied by the "QRegularExpressionMatchIterator"
i changed int i to int h then ++h and switch h and it works.
Thank you great!
26/27