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

やっぱ関数だけ。

 /*----------------------------------------------------------------*/
 /* 関数名: SjisToEuc                       */
 /*  機能: SJIS コードを EUC コードに変換する          */
 /*  引数: (in) *str_in … EUC文字列              */
 /*     (out) *str_out … 変換された S-JIS 文字列       */
 /* 返り値: なし                         */
 /*----------------------------------------------------------------*/
 void SjisToEuc(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      /* 上位・下位コード取得 */
     HighAsc = *(str_in+i);
     LowAsc = *(str_in+(i+1));

     /* 半角カタカナ */
     if(0xA0 <= HighAsc && HighAsc <= 0x40){
       *str_out = 0x8E;
       *(str_out + 1) = HighAsc;

       str_out+=2;
     }
     /* 全角(半角カタカナを除く) */
     else if(HighAsc >= 0x81 && LowAsc >= 0x40){

       /* 下位バイトが 0x40 〜 0x9E のとき */
       if(0x40 <= LowAsc && LowAsc <= 0x9E){
         /* ------------------------------------------- */
         /*        上位バイト設定        */
         /* ------------------------------------------- */
         /* 上位バイトが 0x81 〜 0x9F のとき */
         if(0x81 <= HighAsc && HighAsc <= 0x9F)
           *str_out = 2 * HighAsc - 97;
         else if(0xE0 <= HighAsc && HighAsc <= 0xEF)
           *str_out = 2 * HighAsc - 225;

         /* ------------------------------------------- */
         /*        下位バイト設定        */
         /* ------------------------------------------- */
         if(LowAsc > 0x7F)
           *(str_out + 1) = LowAsc + 0x60;
         else
           *(str_out + 1) = LowAsc + 0x61;

       }        /* 下位バイトが 0x9F 〜 0xFC のとき */
       else if(0x9F <= LowAsc && LowAsc <= 0xFC){
         /* ------------------------------------------- */
         /*        上位バイト設定        */
         /* ------------------------------------------- */
         /* 上位バイトが 0x81 〜 0x9F のとき */
         if(0x81 <= HighAsc && HighAsc <= 0x9F)
           *str_out = 2 * HighAsc - 96;
         else if(0xE0 <= HighAsc && HighAsc <= 0xEF)
           *str_out = 2 * HighAsc - 224;

         /* ------------------------------------------- */
         /*        下位バイト設定        */
         /* ------------------------------------------- */
         *(str_out + 1) = LowAsc + 0x2;

       }

       i++;
       str_out+=2;
     }
     /* 1バイト文字 */
     else{
       *str_out = HighAsc;

       str_out++;
     }
   }

   *(str_out) ='\0';

   /* 先頭位置に戻す */
   str_out = p;

 }  


戻る