wctomb関数の戻り値が-1になりうまくいっておりません。
例えば、「井」をutf8に入力しました。
31行目、c = wctomb(mb, wc)を通るときに、wcの値が4E95になっており、
utf-16の文字コードになっているのを確認しましたが、cの戻り値が-1になっているので、
正しい値が取得できてないです。
wctombの使い方が間違っていますか?
よろしくお願い致します。
過去ログ(http://f4.aaa.livedoor.jp/~pointc/log1243.html)を参考にしたコードです。
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
void UTF8ToSJIS(const char* utf8, char* sjis)
{
int c; char mb[2]; wchar_t wc;
s32 index = 0;
s32 i=0;
setlocale(LC_CTYPE, "");
while ((c = *(char*)utf8++) != 0x00) {
if (c < 0x80)
wc = c;
else if (c < 0xc0)
continue;
else if (c < 0xe0) {
wc = (c & 0x1f) << 6;
if ((c = *(char*)utf8++) == EOF) break;
wc |= c & 0x3f;
}
else if (c < 0xf0) {
wc = (c & 0x0f) << 12;
if ((c = *(char*)utf8++) == EOF) break;
wc |= (c & 0x3f) << 6;
if ((c = *(char*)utf8++) == EOF) break;
wc |= c & 0x3f;
}
else
continue;
c = wctomb(mb, wc);
if (c > 0) {
sjis[index] = *mb;
index+=c;
}
}
}