2017-02-05 6 views
0

Eingang:Convert char-Array zu Array hex

char arr1[9] = "+100-200" // (+ is 2B, - is 2D, 1 is 31 and 2 is 32) 

Ausgang:

unsigned int arr2[4]= [0x2B31,0x3030,0x2D32,0x3030] 

Wie kann ich das tun?

+0

Sehr ähnlich [diesen Link] (http://stackoverflow.com/questions/10746450/how -konvertieren-Zeichenfolge-zu-Hexadezimal). –

+0

Wird zur Sicherheit in nicht signierte Zeichen umgewandelt. Ein Zeichen ohne Vorzeichen ist eine kleine Ganzzahl im Bereich 0-0xFF. Zwei von ihnen können kombiniert werden, um eine 16-Bit-Ganzzahl im Bereich 0-0xFFFF einfach durch Bitverschiebung und logische ODER-Verknüpfung –

+0

@MalcolmMcLean zu bilden: um 16-Bit-Ints aufzunehmen, wäre es sicherer, das Ergebnis auf '(unsigned int) 'vor dem Verschieben. Die spezifischen Werte in dem Beispiel würden kein Problem darstellen, aber der Code sollte so generisch und übertragbar wie möglich sein. – chqrlie

Antwort

1

Ihre Frage scheint inkonsistent zu sein: 0 sollte in 0x30 konvertiert werden, sein ASCII-Wert.

Warum diese Änderung ist der Code ganz einfach:

char arr1[8] = "+100-200"; 
unsigned int arr2[4]; 

for (int i = 0; i < 8; i += 2) { 
    arr2[i/2] = ((unsigned int)(unsigned char)arr1[i] << 8) | 
        (unsigned int)(unsigned char)arr1[i + 1]; 
} 

for (int i = 0; i < 4; i++) { 
    printf("0x%04X ", arr2[i]); 
} 
printf("\n"); 

Ausgang:

0x2B31 0x3030 0x2D32 0x3030 
+0

Vielen Dank für die Hilfe, ich habe den ursprünglichen Beitrag bearbeitet, um die Frage klar zu machen. – Akhil