プロが教えるわが家の防犯対策術!

C言語初学です。よろしくお願いします。

16進表記のunicodeの文字列データ(もともとは漢字のデータ)があり、
それをもとの文字列として出力したいのですが、
C言語でどういうプログラムを書けば良いのか分からず困っています。
============================================
例えば、「0x6F22」というデータがあった場合、
それを文字列に変換して「漢」という字を出力したいのです。
http://ja.wiktionary.org/wiki/漢)
============================================

C99やC++、PHP、Rubyなどでは、
ユニバーサルキャラクタ(?)というのを使って
一発で変換できるようなのですが、
今回は学習目的というのもあって、
なんとかC言語でできないかと思っています。

おおまかな話でも良いので、
なにか取っ掛かりになる情報のご教示お願い致します。

A 回答 (6件)

> wchar_tの内部表現がunicodeという決まりありましたっけ?



確かに wchar_t = Unicode(UCS2/4) を期待すると移植性なくなりますね。
厳密にやりたいなら ICU 使うとか、そんな対処になるのかと。

参考URL:http://site.icu-project.org/
    • good
    • 0

wchar_tの内部表現がunicodeという決まりありましたっけ?


C99からは __STDC_ISO_10646__ が定義されていれば互換性はあるみたいですけど。
    • good
    • 0

#include <stdio.h>


#include <stdlib.h>
#include <locale.h>

int main() {
unsigned long value;
char* dummy;
const char* input = "0x6f22";
unsigned long val = strtoul(input, &dummy, 16);
setlocale(LC_ALL,"japanese");
printf("[%C]\n", (wchar_t)val);
return 0;
}
    • good
    • 0

>strcat("\u","6f22")とかでは


>エラーになってしまいます。 

とりあえず

"\u"と"6f22"を連結したところで"\u6f22"と同じにはならないです。

学習目的とおっしゃていますが文字コード関連は変換絡むと難易度高いですよ?

この回答への補足

>学習目的とおっしゃていますが文字コード関連は変換絡むと難易度高いですよ?

調べている中で確かに敷居の高さを感じます。

javaやpython,rubyといったところでは
一発で変換できるみたいだったので、
Cでも割りと簡単かと思ったんですが
そんな甘い感じではないのですね。

処理しようとしているデータが結構膨大なので、
速度の出るCで処理できればと思ったのですが、
C以外の言語も選択肢に入れて勉強してみます。

補足日時:2014/06/11 19:40
    • good
    • 0

C99 は「C言語」だから C99 にすれば解決?

この回答への補足

> C99 は「C言語」だから C99 にすれば解決?

すいません。C99より古いのをなんというのか分からなかったので、
C言語と書いてました。

C99だとエスケープシーケンス(?)というのでしょうか、
"6f22"の前に"\u"を付けて、
printf("%s\n","\u6f22");
のようにすると「漢」が表示されたのですが、
いまそこでまた壁にぶち当たってます。


非常に単純なサンプルで申し訳ないんですが、
例えば下記のようなtest.cで
"\u"と"6f22"を連結させたような形で
printfに渡したいのですが、
strcat("\u","6f22")とかでは
エラーになってしまいます。 

基本的なことかもしれませんが、
解決方法ありますでしょうか。


== test.c =======================
#include <stdio.h>

int main(void)
{
char text1[256]="6f22";
char text2[256];

/*
ほんとはここで
  "\u"とtext1を連結させて、text2とし、
  printfに"\u6f22"のような形で渡したい
*/

printf("%s\n",text2);

return 0;
}
==================================

補足日時:2014/06/11 19:03
    • good
    • 0

取っ掛かりということなら iconv

この回答への補足

下記URLなどを参照したんですが、まだ理解不能状態です・・・
http://www.geocities.jp/sanpontze/web.html

勘違いしてたら申し訳ないんですが、
iconvは文字コード変換(例えばSJIS→UTF-8)で、
私のやりたいことは
「unicodeエスケープシーケンスのデコード」というものらしいので、
iconvは少し目的とは外れるのではないでしょうか。

補足日時:2014/06/11 18:33
    • good
    • 0

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