CString to BYTEarray

Hi!

Hatte ja schon mal das umgekehrte Problem.

Situation:
Der String enthält folgende Zeichenkette ( _ entspricht Leerstelle ): „E0_00_F7_E3_00_12_13_03_FF_07“ Die einzelnen Buchstabenpaare ergeben immer eine Hexademzimalzahl. Also 0xE0 0x00 0xF7 …

Wie bekomme ich nun die Hexzahlen wieder aus dem Stringarray zurück?
Sie sollen in ein Array mit 10 Stellen des Datentyps BYTE ( 0 - 127 ) gespeichert werden.
Das Hexzahlen - Array soll also folgendermaßen aussehen:
BYTE telegram[10];
telegram[0] = E0
telegram[1] = 00

Wäre euch echt dankbar

Tara

Hi!

Hatte ja schon mal das umgekehrte Problem.

Situation:
Der String enthält folgende Zeichenkette ( _ entspricht
Leerstelle ): „E0_00_F7_E3_00_12_13_03_FF_07“ Die einzelnen
Buchstabenpaare ergeben immer eine Hexademzimalzahl. Also 0xE0
0x00 0xF7 …

Wie bekomme ich nun die Hexzahlen wieder aus dem Stringarray
zurück?
Sie sollen in ein Array mit 10 Stellen des Datentyps BYTE ( 0

  • 127 ) gespeichert werden.

BYTE ist ein unsigned char (0-255)

Das Hexzahlen - Array soll also folgendermaßen aussehen:
BYTE telegram[10];
telegram[0] = E0
telegram[1] = 00

Wäre euch echt dankbar

Tara

Hi Tara,
hier mal ganz rudimentär mit simplem C.
Das Ganze kann man natürlich noch wesentlich kompakter und universeller schreiben. Aber für deinen Fall tut es, was es soll.

BYTE hex (char *s)
{
int buff[2]={0,0};
s= strupr(s); // sicher ist sicher, könnte ja auch e0 sein
for (int i=0;i=‚A‘) buff[i]= s[i]-‚A‘+10; // reine ASCII-Rechnung
else buff[i]= s[i]-‚0‘;
}
return buff[0]*16 + buff[1];
}

void test()
{
CString cs=„E0_00_F7_E3_00_12_13_03_FF_07“;
BYTE telegram[10],cnt=0;
char buffer[3]=„00“; //wichtig wegen Null-Terminierung bei strncpy
char *s= cs.GetBuffer();

for (int i=0;i

Hi!

Danke!!!

schneller und universeller
Hi Tara,

hier das Ganze noch etwas universeller. Damit kannst du auch Strings wie 0xAbcFF78h korrekt umwandeln. Für deinen Fall musst dann halt einfach den Aufruf casten.
also BYTE x= (BYTE) hex;

long hex (char *s)
{
long i,ret=0,cnt=0;
if (s[1]==‚X‘) s=&s[2]; //wegen 0x und shiften bei 0
for (i=0;i=‚A‘) && (s[i]=‚a‘) && (s[i]=‚0‘) && (s[i]

Hallo!

Am schnellsten geht wohl folgende Lösung:

CString strHex( "E0 00 F7 E3 00 12 13 03 FF 07" );
strHex.MakeUpper( );
BYTE byHex[10];
sscanf( strHex, "%X %X %X %X %X %X%X %X %X %X", &byHex[0], &byHex[1], &byHex[2], &byHex[3],
 &byHex[4], &byHex[5], &byHex[6], &byHex[7], &byHex[8], &byHex[9] );

Grüße Safog

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]