8-Zeichen-String in 4Byte-Array umwandeln.
-
Hi, ich habe folgendes Problem:
Ich muss Personalnummern, die z.B. als std::string's
existieren, alsostring pn = "01234567";
in ein Byte-Array umwandeln, bei dem immer vier Bit
eine Ziffer darstellen sollen, also:01 23 45 67 (= 4 Bytes).
Kann mir jemand sagen, wie das am besten geht?
Schon mal vielen Dank,
Tux
-
Schau dich mal nach "BCD-Codierung" um
Ansonsten ein Ansatz:
for(i=0;i<strlen(txt);i+=2) { char high=txt[i]-'0'; char low=txt[i+1]-'0'; out[i/2]=(high<<4)&low; }
(eventuell solltest du vorher noch überprüfen, daß keine Nichtziffern im Text vorkommen - und Sonderbehandlung für ungerade Textlängen vorsehen)
-
Danke,
mit dem Bits schieben hatte ich das allerdings schon so ähnlich,
wenn auch nicht so komfortabel, weil ich es ohne Schleife gelöst hatte.
Das Problem ist allerdings nach wie vor, dass ich nach der Umwandlung
nur Nullen im Output-Array stehen habe.int i; const char *persnum = "01234567"; char *persnum_bcd = new char[4]; for (i = 0; i < 8; i+=2){ char high = (int) persnum[i] - '0'; char low = (int) persnum[i+1] - '0'; persnum_bcd[i/2] = (high << 4) & low; printf("%c %c ", persnum[i], persnum[i+1]); } printf("\n"); for (i = 0; i < 4; i++){ printf(%02X ", persnum_bcd[i]; }
stdout schrieb:
0 1 2 3 4 5 6 7
00 00 00 00Wo liegt mein Fehler?
-
Wo liegt mein Fehler
Du solltest statt des logischen AND (&&) lieber das binäre AND (&) verwenden.
(PS: Und gib' mal in der oberen Schleife aus, was in low und high stand)
-
CStoll (off) schrieb:
Wo liegt mein Fehler
Du solltest statt des logischen AND (&&) lieber das binäre AND (&) verwenden.
(PS: Und gib' mal in der oberen Schleife aus, was in low und high stand)
Nein, er sollte statt dem binären UND lieber das binäre ODER | benutzen
-
Neku schrieb:
Nein, er sollte statt dem binären UND lieber das binäre ODER | benutzen
Stimmt *duckt sich und versinkt im Boden* ich war wohl zu lange im Sandkasten - das färbt ab.
-
Nein, er sollte statt dem binären UND lieber das binäre ODER | benutzen
Danke, wenn ich recht drüber nachdenke auch logisch... :),
hab wohl etwas lange nicht mehr programmiert.Das binäre & hatte ich übrigens in meinem Programm. Da ich mit
dem Entwicklungsrechner aber gerade nicht am Netz bin, hatte ich
das falsch ins Forum abgetippt.Danke also für die Blitzantwort. Ich hatte das in der selben
Minute noch von && auf & geändert!Super Neku, jetzt läuft es.
Vielen Dank!
-
code-tux schrieb:
Super Neku, jetzt läuft es.
Vielen Dank!
Immer gerne, darum habe ich mich heute Nacht mal angemeldet