wchar_t
wchar_t の中身が UTF-16 なのは glibc だからじゃないかしら。
手元の FreeBSD 7.0-STABLE だとこんなかんじ。
$ echo -n 'あ' | nkf -e | LANG=ja_JP.eucJP ./a.out ffffffa2 ffffffa4 00 00 $ echo -n 'あ' | nkf -w | LANG=ja_JP.UTF-8 ./a.out 42 30 00 00 $ echo -n 'あ' | nkf -s | LANG=ja_JP.SJIS ./a.out ffffffa0 ffffff82 00 00 $ echo -n 'a' | LANG=ja_JP.eucJP ./a.out 61 00 00 00 $ echo -n 'a' | LANG=ja_JP.UTF-8 ./a.out 61 00 00 00 $ echo -n 'a' | LANG=ja_JP.SJIS ./a.out 61 00 00 00
こんなソースでいいかげんに出力。
#include <wchar.h> #include <locale.h> #include <stdio.h> int main(void) { wint_t c; char *s = (char *)(&c); int i; setlocale(LC_ALL, ""); while ((c = getwchar()) != WEOF) { for (i = 0; i < sizeof(wchar_t); i++) printf("%02x ", s[i]); putchar('\n'); } return 0; }