Cで書いちゃったよ。関数だけ。VBと違って改行コードが無い場合には対応してないよ。かねしてちょ〜。
/*----------------------------------------------------------------*/
/* 関数名: EucToSjis */
/* 機能: EUC コードを SJIS コードに変換する */
/* 引数: (in) *str_in … EUC文字列 */
/* (out) *str_out … 変換された S-JIS 文字列 */
/* 返り値: なし */
/*----------------------------------------------------------------*/
void EucToSjis(unsigned const char *str_in, unsigned char *str_out){
int i, strLen;
unsigned int HighAsc; /* 上位コード */
unsigned int LowAsc; /* 下位コード */
unsigned char *p;
/* 文字バイト数取得 */
strLen=strlen((const char *) str_in);
/* 先頭位置コピー */
p = str_out;
for(i=0;i<strLen;i++){
/* 上位・下位コード取得 */
HighAsc = *(str_in+i);
LowAsc = *(str_in+(i+1));
/* 2バイト文字である */
if(HighAsc > 0x7F){
if(HighAsc == 0x8E){
/* 半角カタカナである */
*str_out = LowAsc;
/* 1文字分進める */
str_out++;
}
else{
/* 1バイト目変換 */
/* 偶数である */
if((HighAsc % 2) == 0){
if(HighAsc < 0xDF){
*str_out = 0.5 * HighAsc + 48;
}
else if(0xE0 <= HighAsc && HighAsc <= 0xFE){
*str_out = 0.5 * HighAsc + 112;
}
}
/* 奇数である */
else{
if(HighAsc < 0xDF){
*str_out = 0.5 * HighAsc + 48.5;
}
else if(0xDF <= HighAsc && HighAsc <= 0xFD){
*str_out = 0.5 * HighAsc + 112.5;
}
}
/* 2バイト目変換 */
/* 1バイト目が偶数である */
if((HighAsc % 2) == 0){
*(str_out+1) = LowAsc - 0x2;
}
/* 1バイト目が奇数である */
else{
*(str_out+1) = LowAsc - 0x61;
if(*(str_out+1) > 0x7E)
*(str_out+1) = *(str_out+1) +1;
}
str_out+=2;
}
/* 1バイト分すすめる */
i++;
}
/* 1バイト文字である */
else{
*str_out = HighAsc;
str_out = str_out + 1;
}
}
*str_out = '\0';
/* 先頭位置に戻す */
str_out = p;
}
|