Robert B.: Typkonvertierung in C bzw. Perl

Beitrag lesen

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