Moin pl,
Über
0x7f
fängt der Spaß erst richtig an, weil man Zeichenkodierungen berücksichtigen muss 😉Wenn Du bei der Bytesemantic bleibst, spielt die Zeichenkodierung überhaupt keine Rolle. Und das ist nicht nur in C so.
Oh doch! Wie gut, dass du ein Beispiel mitgereicht hast:
unsigned char *eurosign = "€"; printf("%d Bytes\n", strlen(eurosign)); // 3 Bytes uint8_t *n = (uint8_t*)eurosign; printf("%X %X %X", n[0], n[1],n[2]); // E2 82 AC
Wenn ich meinen Quellcode in ISO-8859-1 speichere und kompiliere, erhalte ich:
unsigned char eurosign[] = "€"; /* ← Diese Variante der Stringnotation wird weniger von Compilern angemeckert. */
printf("%u Bytes\n", strlen(eurosign)); /* 1 Zeichen (2 Bytes: das Zeichen und '\0'). strlen gibt immer einen unsigned Wert zurück, daher das passende Formatflag! */
printf("%x %x\n", eurosign[0], eurosign[1]); /* a4 0 */
Viele Grüße
Robert