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?
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?
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
Vielen Dank für die Hilfe, ich habe den ursprünglichen Beitrag bearbeitet, um die Frage klar zu machen. – Akhil
Sehr ähnlich [diesen Link] (http://stackoverflow.com/questions/10746450/how -konvertieren-Zeichenfolge-zu-Hexadezimal). –
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 –
@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