- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:文字コードから文字列への変換)
文字コードから文字列への変換
このQ&Aのポイント
- バイナリデータをstdin経由で渡すために、16進コードを文字に変換したい。
- バイナリデータを扱いたいが、Cの知識の不足に挫折してしまった。
- どのように16進コードを文字列に変換すれば良いかアドバイスを求めています。
- みんなの回答 (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進数として妥当なコードだとか、チェックすることはいっぱいありそうです。
お礼
助かります、ポインタ駄目人間なので、記述法がとても参考になりました。 無事に、0xを判定して渡せるようになりました。 もっと精進しないといけませんね(^^;; どうもありがとうございました。