dポイントプレゼントキャンペーン実施中!

お世話になります。
件名の内容で、参考になるサイトや手法などをご教授願います。
【件名】C言語で16進数をテキスト出力したい。
【環境】OS:WindowsXPsp2 コンパイラ:borlandC
【詳細】
現在、C言語で以下の手順で処理を行うプログラムを作成しております。
手順1:ASCIIコードで記載されたテキストをUTF8コードに変換
手順2:UTF8に変換された1行目の文字列を16進数コードフォーマットをファイル名にして保存

手順2の16進コードフォーマットのファイル名にして保存する作業で
fprintf(buff,"%x",UF8); //"buff"保存ファイル名、"UTF8"1行目文字列

を用いて行えるかと思ったのですが、どうやら直接16進数の名称を吐き出すことが不可能なようで、どのように行ったらいいか皆目検討がついておりません。
そこで大変恐縮ですが、参考になる手法や、情報がありますサイト等をお教え頂けると幸甚です。
よろしくお願いいたします。

A 回答 (2件)

UTF8がchar配列だとしてですが、


for( i=0 ; 0x00!=utf8[i] ; i++ ) {
fprintf(buff,"%02x",UTF8[i]);
}
ですかね。適当なところで改行入れないと見づらいとは思いますが。
    • good
    • 0
この回答へのお礼

ご回答有難う御座います。
非常に参考になりました。心より感謝いたします。

お礼日時:2009/03/08 01:59

何をするのかがいまいち不明瞭なのですが。



まず、UTF-8はASCIIコードを含む形で定義されていて、ASCIIしか含まれない場合、ASCIIと区別がつかない全く同じコードになったと思います。(先頭の識別用バイト列、いわゆるBOMをのぞく)

次に、手順2の内容は、入力の1行目を16進表現した文字列をファイル名に使いたい用に見えます。(ファイルの中身は入力の全体がUTF-8変換されたもの)

しかし、示されたコードはfprintfであり、ファイル自体への出力に見えます。また、buffはFILE*(ファイルポインタ)のはずですが、ファイル名となっています。

質問の要点は、文字列の各バイトを16進表現した文字列を作成する方法でよいでしょうか。

この場合、もっとも移植性の高いコードは
for (i = 0; UF8[i] != '\0'; i++)
  sprintf(&buff[i * ((CHAR_BIT + 3) / 4)], "%0*x", (CHAR_BIT + 3) / 4, UF8[i]);
です。なお、このコードは出力先のバッファが変換対象の文字列に対して十分に大きいこと(長さ×16進表現の桁数+1)を期待しています。
ちなみに、((CHAR_BIT + 3) / 4)はCは規格上charのビット幅が決まっていないので必要になります。

もしもファイル自体に出力したいのであれば#1の方のを参考にしてください。
    • good
    • 0
この回答へのお礼

ご回答有難う御座います。
説明が不足し余計な混乱を招いてしまって申し訳ありません。
>示されたコードはfprintfであり、ファイル自体への出力に見えます。
ご指摘いただいたようにbuffはファイルポインタの名称として用いております。
今回16進コードに変換したファイル名を設けるにあたり、別途書き込みファイルを用意し、その中に16進コードに変換したファイル名を格納。
テキストに格納された文字列をもとに新たに書き込みファイルを生成し、
必要なデータを格納するという、非常に回りくどい手順を踏んでおります。
このような説明不足の質問に対し丁寧に回答頂き感謝致します。

お礼日時:2009/03/08 01:49

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