• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:文字コードから文字列への変換)

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

このQ&Aのポイント
  • バイナリデータをstdin経由で渡すために、16進コードを文字に変換したい。
  • バイナリデータを扱いたいが、Cの知識の不足に挫折してしまった。
  • どのように16進コードを文字列に変換すれば良いかアドバイスを求めています。

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

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

> それで、バイナリはstdinから読めなさそうだったので、 そんなことはありません。使っているOSによって多少違うのですが、setmode() や fcntl() と 言う関数を使います。 それらの関数には、ファイルディスクリプタという整数を引数にとるのですが、stdin の ファイルディスクリプタは普通0です。 # stream から取得する関数があったはずなのですが、思い出せません (^^; > その文字列で書かれた16進コードを文字に直す方法なのです。 安直なのは sscanf() を使う方法かなあ。 エラーチェックなんかを全部はしょってますが、以下のような感じ。 #include <stdio.h> int conv(char* in, char* out) {   int ch;   char* p = in + 2;   while (*p) {     sscanf(p, "%2x", &ch);     *out++ = ch;     p += 2;   }   *out = '\0';   return 0; } int main() {   char buf[80] = "0x414243";   char buf2[80];   conv(buf, buf2);   printf("'%s' --> '%s'\n", buf, buf2);   return 0; } 渡される文字列の先頭が "0x" じゃないとき、とか、きちんと二桁単位で記述されて いるとか、16進数として妥当なコードだとか、チェックすることはいっぱいありそうです。

pythian
質問者

お礼

助かります、ポインタ駄目人間なので、記述法がとても参考になりました。 無事に、0xを判定して渡せるようになりました。 もっと精進しないといけませんね(^^;; どうもありがとうございました。

関連するQ&A