• ベストアンサー

ASCIIコードの文字列化

”3t<02q<R”という文字列が与えられた時”株式会社” とする変換をC言語で記述する方法が分かりません。 3 -> 0x33 t -> 0x74 0x3374 -> 株 までは分かったのですが・・・ よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.3

要するに、JISからShift-JISへの変換ですね。 http://www.tohoho-web.com/wwwkanji.htm ---ここから--- #include <stdio.h> void jis2sjis(char *dst, char *src) { while (src[0] && src[1]) { int c1 = ((unsigned char *)src)[0]; int c2 = ((unsigned char *)src)[1]; if (c1 % 2) { c1 = ((c1 + 1) / 2) + 0x70; c2 = c2 + 0x1f; } else { c1 = (c1 / 2) + 0x70; c2 = c2 + 0x7d; } if (c1 >= 0xa0) { c1 = c1 + 0x40; } if (c2 >= 0x7f) { c2 = c2 + 1; } *dst++ = c1; *dst++ = c2; src += 2; } *dst = '\0'; } int main(void) { char src[] = "3t<02q<R"; char dst[9]; jis2sjis(dst, src); printf("src=%s\ndst=%s\n", src, dst); } ---ここまで--- こんなとこかな。

hir0627
質問者

お礼

mtaka2様 ソースコードありがとうございました。 意図した結果を得られる事ができて、大変感謝しております。 ご教授いただいた、ソードとHPを参考に勉強させていただきます。 ありがとうございました。

その他の回答 (2)

回答No.2

「変換する?」とはどういう意味ででしょうか? ”株式会社”という文字列を表示したいと言う事であれば、表示する為の関数に併せた文字コードに変換すれば良いです。 例えば昔の開発環境であればシフトJISに、またはunicode等に変換する場合もあります。 [0x3374(株)]は調べてみるとJISコードのようですが、JISコードは漢字コードとASCII文字とを区別するために、「漢字IN」「漢字OUT」を持っていたと思います。 与えられる入力データというのは、漢字コード部分のみのデータが与えられるのでしょうか?

参考URL:
http://www.unixuser.org/~euske/doc/kanjicode/index.html
hir0627
質問者

補足

hiro_knigh様 早速のご回答ありがとうございます。 説明が不十分でした・・・ ”3t<02q<R”という文字列を”株式会社”という文字列に変換したいのです。 char* in = "3t<02q<R"; char* out = asciiTosjis(in); という説明で通じますでしょうか? 説明が下手ですみません・・・

回答No.1

>”3t<02q<R”という文字列が与えられた時 これ、前提が間違ってませんか? 与えられている「データ」は「文字列」ではなく「バイナリーデータ」では? 「0x33, 0x74, 0x3c, 0x30, 0x32, 0x71, 0x3c, 0x52」 いう「バイナリーデータ」を「全部ASCIIコードの体系」で表示すると質問の通り「3t<02q<R」となります。 しかし、「2Byte文字である、JISコードの体系」として認識すれば、「0x3374, 0x3030, 0x3271, 0x3c52」でそのまま「株式会社」という文字コードとして扱います。 「JISコード」の体系では表示できないので「Shift-JIS」等に変化するというのならまた別ですが。

hir0627
質問者

補足

SilverThaw様 前提は間違っていません。 テキストファイルに”3t<02q<R”という文字列を記述します。 素人向けの暗号化でしょう。。。

関連するQ&A