Da hätte ich eine fertige Funktion für Dich, allerdings müsstest Du bis morgen warten, die habe ich nur auf meinem Arbeits-PC...
askazo
Hi Leute,
wie kann ich eine Reihe von Hex-Werten in einen String packen?
also der String soll USBDATA heißen und die folgende werte sollen da rein
0x02,0x33,Wert1,Wert2,Wert3,Wert4,Wert5,Wert6,Wert 7,Wert8,0x0D
Ich hoffe des war deutlich ausgedrückt!
greez!
Da hätte ich eine fertige Funktion für Dich, allerdings müsstest Du bis morgen warten, die habe ich nur auf meinem Arbeits-PC...
askazo
Joa das wäre cool!
So, folgende Funktion macht aus einem Hex-Byte ein Ascii-Word.
Aus 0x2F wird also 0x3246. Wenn Du das Word nun in einen String schreibst, wird wieder 2F draus, diesmal als String.
Nun musst Du das ganze nur noch zu einem kompletten String zusammensetzen.
Das 0x lässt sich dann auch leicht einbauen, wenn Du das noch davor haben möchtest.
Gruß,Code:WORD Hex2Ascii(BYTE byHex) { WORD wAscii; BYTE byLow, byHigh; byLow = byHex & 0x0F; byHigh = byHex >> 4; if (byHigh > 9) wAscii = (0x37 + byHigh) << 8; else wAscii = (0x30 + byHigh) << 8; if (byLow > 9) wAscii += 0x37 + byLow; else wAscii += 0x30 + byLow; return wAscii; }
askazo
aha Danke!
Nur hab ich gerade ein kleines Verständnissproblem.
Weil ich weiß nicht so genau wie ein String aufgebaut ist.
Wenn ich deine Funktion nun benutze dann wäre es mir mit dieser Möglich einen HEX-Wert z.B. 0x2F auf einem LCD-Display auch als 2F auszugeben.
Aber ich möchte ja Daten über den USB-Bus zu meinem µController bringen. Dazu muss ich diese Daten (siehe ersten Beitrag) in einen String schreiben z.B. *string um möglichst "viele" Daten auf einmal zum µC zu bringen. Am µC sollen dann wieder normal die Daten vorhanden sein.
z.B.
0x02,0x33,0xFF,Wert2.....usw.,0x0D
und dann bekommt der µController auch wieder
STX = 0x02
DEVICE = 0x33
Wert1 = 0xFF
Wert2 = 0x00
... usw.
ETX = 0x0D
Sorry wenns schlecht beschreiben ist ich hab keine ahnung wie ich mich so recht ausdrücken soll.
gruß
PS: Weil bei einem String kann ich ja im normalfall einfach "HalloWelt!" schreiben und dann kommen die Werte nacheinander anstelle von dem "" und den Buchstaben was ja ASCII werte sind möchte ich halt normale HEX-Werte von 0 - FF verschicken...
Hallo,
such mal die libary string. da gibt es eine funktion die nennt sich strcat. mit der kannst du problemlos an einem string einen weiteren anhängen, würde dann so aussehen:
das einzige was du beachten musst, ist even. das format deiner werte, sollte es probleme geben sollte aber jede hilfe klärenCode:char USBDATA[100] strcpy(USBDATA,"02"); //oder 0x02, jenachdem was du brauchst/willst strcat(USBDATA,"33"); //hier das selbe strcat(USBDATA,Wert1); // anhängen strcat(USBDATA,Wert2); // anhängen strcat(USBDATA,Wert3); // anhängen strcat(USBDATA,Wert4); // anhängen strcat(USBDATA,Wert5); // anhängen strcat(USBDATA,Wert6); // anhängen strcat(USBDATA,Wert7); // anhängen strcat(USBDATA,Wert8); // anhängen strcat(USBDATA,"0D"); // anhängen
mfg Lion
Ja gut nur möchte ich ja keinen String an einen String hängen sondern aus vielen char einen String bilden.
Hallo,
was ist ein string und ein char? hm hm ? da gibt es kaum unterschiede bis auf das, dass der string begrenzt ist, zb (char test[10]), sonst ist da kein unterschied. und ausserdem ist es nicht besser wenn du für werte fixen bereicht nimmst? 2, 3 od 4 stellen? somit is egal welchen wert du hast, du hast immer deine fixe "wortbreite", wenn man es so nennen will.
mfg Lion
?!?
Ich blick jetzt grad gar nix mehr.....
wenn ich z.B. einen *String = "Hallo" habe
Dann besteht der string doch aus Folgendem:
H = 0x48
a = 0x61
l = 0x6C
l = 0x6C
o = 0x6F
also stehen diese Werte doch irgendwie hintereinander?!?
Nur muss ich die Hex-Werte ja gar nicht hinschreiben weil mein Compiler ja weiß das ein H, 0x48 entspricht. wenn ich das Wort zwischen die Anführungszeichen schreibe.
Bei deiner Funktion da oben steht aber mein HEX-Wert den ich haben möchte zwischen den "" dies müssten dann aber zwei Werte sein zum einen 0x30 und zum anderen 0x44?!? oder sehe ich des falsch?
Sorry ich verstehe aber gerade die Welt nicht mehr.
Ich dachte irgendwie an so etwas:
sprintf(output,"%c%c%c%c%c%c%c%c%c%c%c",0x02,DEVIC E,WERT0,WERT1,WERT2,WERT3,WERT4,WERT5,WERT6,WERT7, 0x0D);
nur funktioniert des ganze nicht...
OK schwere Geburt!!!
Aber jetzt endlich hab ich es doch noch geschafft!
Trotzdem danke an euch alle!Code:char output[14]; output[0] = 0x02;//STX output[1] = 0x33;//DEVICE output[2] = 0x48;//WERT0 output[3] = 0x65;//WERT1 output[4] = 0x79;//WERT2 output[5] = 0x20;//WERT3 output[6] = 0x48;//WERT4 output[7] = 0x6F;//WERT5 output[8] = 0x21;//WERT6 output[9] = 0x21;//WERT7 output[10]= 0x0D;//ETX cout << output << endl;
gruß Marc
Lesezeichen