8バイトデータを16進表示するには???

解決


ふ〜  2005-04-14 08:20:03  No: 57021  IP: [192.*.*.*]

C言語初心者なのですが、
8バイト(64ビット)で格納されているデータを
16進でCHAR形に変換したいのですがどうやればよいのでしょう???
変換元8バイトはBYTE型?みたいです。

編集    削除
みい  2005-04-14 08:52:30  No: 57022  IP: [192.*.*.*]

変換元8バイトが__int64(64ビット)型の場合は
char buf[16];
__int64 aaa=0x0000ffff;
sprintf(buf, "%08I64X", aaa);
-> 08で0埋めで最小8文字(これを付けない場合は上記の例だと"FFFF"になる)
-> I64で__int64指定、Xで16進

編集    削除
PATIO  2005-04-15 01:30:57  No: 57023  IP: [192.*.*.*]

printfとか、sprintfのフォーマット書式と言うのを調べてみた方がよろしいかと。
みいさんが書かれているのは、今回の問いに必要な最小限の部分だけです。
今後の事を考えるのであれば、フォーマット書式の概要くらいは頭に入れておいたほうがいいです。

編集    削除
ふ〜  2005-04-15 07:20:18  No: 57024  IP: [192.*.*.*]

すみません。
64ビットなのですが、
型は、
typedef unsigned char BYTE;
で定義していて、
BYTE ab[20];
memset(ab,(BYTE *)&abc[10],8);
abcの8バイトをこのabに格納して
printf("%X\n",ab);
で出力し、16進文字(C0A8・・・)みたいな表示したかったのですが、
結果が得られなかったのです。

編集    削除
みい  2005-04-15 10:19:29  No: 57025  IP: [192.*.*.*]

どこからつっこんでよいものやら。
×memset、○memcpy
ですし(関数の意味調べました?)、
> printf("%X\n",ab);
この場合ab=&ab[0](配列abの最初のデータのあるアドレス)なので、
結果が出るわけないし。
PATIOさんが書かれている通り、フォーマット書式について
一通り目を通して下さい。

編集    削除
REE  2005-04-15 22:27:55  No: 57026  IP: [192.*.*.*]

こういうことかな?

sprintf(buf,"%02X%02X%02X%02X%02X%02X%02X%02X", 
    ab[0], ab[1], ab[2], ab[3], ab[4], ab[5], ab[6], ab[7]);

編集    削除
PATIO  2005-04-16 01:14:09  No: 57027  IP: [192.*.*.*]

フォーマット書式に使用されている文字(Xとかdとか)はそれぞれ対応する型が
ありますから、どんなデータを渡しても良しなにやってくれると言う物では
ありません。
どのフォーマット書式を使えば、どんなデータをどんな渡し方で表示できるかは
決まっていますので、フォーマット書式と引き渡す変数の関係についてきちんと
勉強した方がいいです。
ここで必要な部分だけ覚えても応用が効きませんから。

編集    削除
PATIO  2005-04-16 01:16:27  No: 57028  IP: [192.*.*.*]

ちょっと日本語がおかしかったので訂正。

フォーマット書式と引き渡すデータの型や渡し方にはきちんとした対応があります。
フォーマット書式と引き渡す変数の関係についてきちんと勉強した方がいいです。

と書きたかったのです。

編集    削除
ふ〜  2005-04-16 05:30:43  No: 57029  IP: [192.*.*.*]

なんとか解決しました。
おさわがせしました。
これからCを勉強していきたいと思います。

編集    削除