● EUCコードをS-JISコードに変換する ●
─ C言語バージョン ─

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;
 }
 


戻る