• ベストアンサー

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

  • C言語で取得した文字列を、C++の文字列として取り扱いたいです。

    C言語で取得した文字列を、C++の文字列として取り扱いたいです。 皆さんこんにちは。 C言語で取得したchar型で定義された文字列を、 C++の「std::string」に渡したいと思っております。 どうすればかなうでしょうか? 具体的には次のような内容です。 ■C言語側 ---- char key1 = "deperture"; ---- ■C++側で「key1 = key2」としたいです。 ---- std::string key2 = key1; ---- C言語側で記述されている「key1」の値(deperture)を、 C++ソース内の「key2」に渡したいと思っています。 こうゆう場合、どんな方法をとれば適切でしょうか。 C言語側でのchar型の文字列の値を、 C++側の「std::string」型として C++のソースへ渡す方法が分からないです。 アドバイスいただけるとありがたいです。 簡単な例を頂けると更に大変ありがたいです。 以上どうぞ宜しくお願い致します。

  • C++で文字コードの変換

    こんにちは! C++のソース上で、UTF-8で記述された文字列をSHIFT-JISに変換する方法をご存知の方いらっしゃいましたらご教示願います。

    • ベストアンサー
    • CGI
  • Objective-C文字列からC言語文字列に変換したいのですが、どう

    Objective-C文字列からC言語文字列に変換したいのですが、どうすればよいでしょうか? C言語からObjective-cなら NSString *cToOc = [[NSString alloc] initWithCString:"結果" encoding:NSUTF8StringEncoding]; NSLog(@"%@", cToOc); でよいのですが、その逆が知りたいです。 あとこの cToOcは以下のように解放しないといけないのでしょうか? [cToOc release];

  • Excelの文字列置換を止める

    条件が少し異なったデータが多数あり、それぞれを別のExcelファイル(dat01.xls~dat10.xlsとします)としています。その中のデータの順番は同じにしてあります。 これらのデータ間の相違を見るため、新しいExcelファイル(summary.xlsとします)を作り、元のデータが入っているファイルの内容を参照するようにしているのですが、例えば summary.xlsのR1C1に=max([dat01.xls]!R1) というように式を記述するとdat01.xlsの1行の最大値が表示されます。このような形でdat01.xlsの色々な特徴量をsummary.xlsに表示させることができるのですが、その後同様にしてdat02.xlsの特徴量を表示させるため、"dat01.xls"という文字列を"dat02.xls"という文字列に変換するということをよくやるのですが、たまに変換する文字列を間違えて入力してしまうことがあります。 こうなると、その間違えた文字列となるファイル名が存在しないので、そのファイルがどこにあるのか1つ1つの変換毎に聞いてきて、その度にキャンセルを繰り返す必要があり、対象となる文字列が多いとキャンセルするのにとても時間がかかるので、途中で文字列変換を中止したいのですが、どのようにしたらよいかわかりません。 <cntl>+<alt>+<del>でExcelを強制終了という方法もたまに行いますが、できればそうでない方法を教えてください。

  • 文字コードから文字列への変換

    よくわからないタイトルですみません(汗。 標準入力からデータを渡すと、I/Oをしてくれるというモジュールを書いているのですが、当初、テキストのみの設計のつもりだったのが、バイナリを扱うはめになってしまいました。 それで、バイナリはstdinから読めなさそうだったので、0xXYZという文字列にしてからstdin経由で渡そうと思ったのです。 今回の質問は、その文字列で書かれた16進コードを文字に直す方法なのです。 つまり、char buf[80] = "0x414243"という文字列を渡した場合、char buf2[80] = "ABC" という文字列を得たいのです。(0x41="A") 変な希望ですが、何通りか試したのですが、根っからのテキスト処理大好きPerl人間なので、Cの知識の無さに挫折してしまいました。 アドバイスをよろしくお願いいたします。

  • 改行コードを含む文字列の分割について

    Java初心者です。 Java言語で、ある文字列を"\r\n"だけを区切り記号として別々の文字列にしたいのですがうまくいきません。 StringTokenizerを使って、 StringTokenizer(msg,"\\r\\n") のようにやって見たのですが、これだと"\r"や"\n"まで区切り記号として分割されてしまいました。 "\r\n"だけを区切り記号として処理するにはどうしたらいいでしょうか? 例えばPOSTで送信した"データ1\r\nデータ2\r\nデータ3\nテスト"という文字列を、 "データ1"、"データ2"、"データ3\nテスト"の3つにしたいのですが。

    • ベストアンサー
    • Java
  • ポインタ文字列をchar[ ]の文字列へ変換する方法

    C言語の問題で悩んでいます。 ポインタ型で受け取った文字列を、通常の配列に変換し、それぞれの文字列がいくつ使われているというプログラムを組みたいのですが、うまくいきません。 とりあえずここまでのソースを。 #include <stdio.h> int count[95]={0}; void Countx(void){ int x; for(x=0;x<=95;x++){ if(count[x]!=0){ printf("'%c': %d\n",x+32,count[x]); } } } void County(char *str){ int c; for(c=0;c<=20;c++){ count[c+32]=str[c]; } } int main(void){ County("I am a BILL."); Counxt(); return 0; } "I am a BILL"の部分が以下のように ' ':3 '.':1 'a':2 というふうにそれぞれの文字と、利用された回数を出すようにプログラムを組みたいのですが、上記のままだとが ' ':84 '!':104 '"':105 と言う風に、文字コードが空白から順番に、右の回数の部分はなぞの数字が表示されてしまいます。 どうか理想どおりの結果が出るようにする方法を教えてください。 よろしくお願いします。

  • 文字列の置換についての質問です。

    ASPにて文字列変数で最後の文字がある文字だったら違う文字に変換したいのですが、 どのような記述をすればよろしいのでしょうか? 具体的には変数strSの最後の文字が「A」だったら「X」に したいと思っています。 どうぞよろしくお願い致します。

  • 文字列から文字列を検索するプログラム

    現在、C言語を学習しています。 文字列から文字列を検索する関数に「strstr]がありますが、自作関数として自分で作成する方法を考えております。 文字列から文字を検索する事は出来たのですが、文字列を検索するシーケンスがわかりません。 有識者の方、御教授よろしく御願い致します。

  • 文字列数値化

     ちょっとした事情によりint型で作った数字の文字列をC言語で数値化する方法を教えてください。 よろしくお願いします。