アプリ版:「スタンプのみでお礼する」機能のリリースについて

”3t<02q<R”という文字列が与えられた時”株式会社”
とする変換をC言語で記述する方法が分かりません。

3 -> 0x33
t -> 0x74
0x3374 -> 株

までは分かったのですが・・・

よろしくお願いいたします。

A 回答 (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);
}
---ここまで---

こんなとこかな。
    • good
    • 0
この回答へのお礼

mtaka2様

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

お礼日時:2009/12/16 15:27

「変換する?」とはどういう意味ででしょうか?



”株式会社”という文字列を表示したいと言う事であれば、表示する為の関数に併せた文字コードに変換すれば良いです。

例えば昔の開発環境であればシフトJISに、またはunicode等に変換する場合もあります。

[0x3374(株)]は調べてみるとJISコードのようですが、JISコードは漢字コードとASCII文字とを区別するために、「漢字IN」「漢字OUT」を持っていたと思います。

与えられる入力データというのは、漢字コード部分のみのデータが与えられるのでしょうか?

参考URL:http://www.unixuser.org/~euske/doc/kanjicode/ind …

この回答への補足

hiro_knigh様
早速のご回答ありがとうございます。
説明が不十分でした・・・

”3t<02q<R”という文字列を”株式会社”という文字列に変換したいのです。

char* in = "3t<02q<R";
char* out = asciiTosjis(in);
という説明で通じますでしょうか?

説明が下手ですみません・・・

補足日時:2009/12/16 12:01
    • good
    • 0

>”3t<02q<R”という文字列が与えられた時


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

この回答への補足

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

補足日時:2009/12/16 12:26
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!