PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C] 0 - F von HEX in Ascii wandeln


Jürgen H.
2009-03-08, 14:37:48
Hab hier ein Array, welches in HEX z.B. so vorbelegt ist: F0 2C 7E. Über eine serielle Schnittstelle sollen die HEX-Zeichen (F,0,2,C,7 und E) aber als Ascii gesendet werden.

Statt F0 2C 7E soll dann F 0 2 C 7 E gesendet werden. Gibts da irgendwelche Funktionen, die das umwandeln oder fällt jemand auf die schnelle was cleveres ein ?

Monger
2009-03-08, 15:10:32
Kommt auf die Sprache an. In .NET gibt es in der Char Klasse eine Methode die da "ConvertFromUTF32" heißt, und genau das macht. Du musst dann "nur" noch dein Array an Hex Zahlen entsprechend aufsplitten, d.h. in lauter 256 Bit (2 Hex) breite Schnipsel zerlegen.

In anderen Sprachen geht das natürlich auch, da kann ich dir nur keine Details nennen.

Jürgen H.
2009-03-08, 15:13:43
Es geht um C, das hab ich vielleicht im Topic nicht deutlich geschrieben, sry

instinct
2009-03-08, 15:14:03
Ein Byte in HEX (z.B. B8):
Schnapp dir die Halbbytes (hier B und 8) und mache folgendes:
Falls Halbbyte <= 9: Halbbyte + 0x30
Falls Halbbyte > 9: Halbbyte + 0x37

Beispiel: B8 => 0x42 0x38 => Verschicken über serielle Schnittstelle

Gast
2009-03-08, 16:28:51
geht da nicht auch sprintf (http://www.cplusplus.com/reference/clibrary/cstdio/sprintf.html) mit %x?

noid
2009-03-08, 19:06:49
geht da nicht auch sprintf (http://www.cplusplus.com/reference/clibrary/cstdio/sprintf.html) mit %x?

Warum denn so einfach? X-D
(würde mir da auch nix basteln, sondern es so machen.)

MikeB
2009-03-08, 20:36:46
Hmm,

unsigned char OneByte = Array[i];
static const char Tab[] = "0123456789ABCDEF";
Send(Tab[OneByte>>4]);
Send(Tab[OneByte&15]);

Gehts einfacher? Selbst sprintf & co wären mehr Arbeit.

noid
2009-03-08, 20:44:30
Hmm,

unsigned char OneByte = Array[i];
static const char Tab[] = "0123456789ABCDEF";
Send(Tab[OneByte>>4]);
Send(Tab[OneByte&15]);

Gehts einfacher? Selbst sprintf & co wären mehr Arbeit.

Aber portabler ;)

MikeB
2009-03-08, 21:11:59
Portabler? Raff ich jetzt nicht... Reines C ohne CRT... :confused:

Jürgen H.
2009-03-08, 22:53:23
Hmm,

unsigned char OneByte = Array[i];
static const char Tab[] = "0123456789ABCDEF";
Send(Tab[OneByte>>4]);
Send(Tab[OneByte&15]);

Gehts einfacher? Selbst sprintf & co wären mehr Arbeit.

Das ist ja genial, danke :)

Bezüglich printf hab ich mir auch schon so meine Gedanken gemacht, aber es verbraucht ziemlich viel Ressourcen