文字コードは EUC や JIS や ShiftJIS などが存在する.
その相互の変換規則は以下のとおりである.
EUC | JIS |
0 〜 0x7F | ASCII |
0x8E80 〜 0x8EFF | 1Byte カナ + 0x8E00 |
0x9000 〜 | 漢字 + 0x8000 |
JIS と SJIS の変換は以下の感じである.
int jis2sjis(int c) {
int hi, lo;
hi = (c>>8) & 0xff;
lo = c & 0xff;
if( hi & 1 )
lo += 0x1f;
else
lo += 0x7d;
hi = (hi - 0x21 >> 1) + 0x81;
if( lo >= 0x7f )
lo++;
if( hi > 0x9f )
hi += 0x40;
return hi << 8 | lo;
}
int sjis2jis(int c) {
int hi, lo;
hi = (c>>8) & 0xff;
lo = c & 0xff;
hi -= ( hi<=0x9f ) ? 0x71 : 0xb1;
hi = hi*2 + 1;
if( lo > 0x7f )
lo--;
if( lo >= 0x9e ) {
lo -= 0x7d;
hi++;
} else
lo -= 0x1f;
return hi << 8 | lo;
}
参照