プログラムリスト  シフトJISの文字列をJISの文字列に変換する関数

関数Sjisstr2Jisstr()

#include <stdio.h>
#include <string.h>
#include <mbstring.h>

void Sjisstr2Jisstr(char *sjistext, char *jistext)
{
    char one[4]="A";
    char two[4]="AB";
    char rtlf[4]="\r\n";
    unsigned short int sjis,jis;
    const char shiftin[4]={ 0x1b, 0x24, 0x42, 0 };
    const char shiftout[4]={ 0x1b, 0x28, 0x42, 0 };
    unsigned char *p=(unsigned char *)sjistext;
    int kanjimode=0;
    *jistext=0;
    while (*p) {
        if (kanjimode==0&&(*p&0x80)) {
            strcat(jistext,shiftin);
            kanjimode=1;
        } else if (kanjimode==1&&(!(*p&0x80))) {
            strcat(jistext,shiftout);
            kanjimode=0;
        }
        if (kanjimode==1) {
            sjis=((*p)<<8);
            p++;
            if (!(*p)) break;
            sjis+=*p;
            jis=_mbcjmstojis(sjis);
            two[1]=(char)jis;
            two[0]=(char)(jis>>8);
            strcat(jistext,two);
        } else {
            if (*p=='\n' && *(p-1)!='\r') {
                strcat(jistext,rtlf);
            } else {
                one[0]=*p;
                strcat(jistext,one);
            }
        }
        p++;
    }
    if (kanjimode==1) {
        strcat(jistext,shiftout);
    }
}

int main()
{
    char sjis[100]="今日はよい天気です。";
    char jis[100];
    Sjisstr2Jisstr(sjis,jis);
    puts(sjis);
    puts(jis);
    return 0;
}

実行結果
今日はよい天気です。
.$B:#F|$O$h$$E75$$G$9!#.(B