プロが教える店舗&オフィスのセキュリティ対策術

あるint型の変数に格納されている情報を、バイト列としてコピーする方法で困っています。

変数の入っている領域をそのままコピーしたいので、memcpyを使うかと思うですが、
コピーされた結果を見ると文字列の並びが逆転しているように見えます。

--サンプルコード抜粋

unsigned int i= 12345;
unsigned char *c;

c = (char *)malloc(sizeof(int));

printf("i_hex=%x\n",i);
memcpy(c,(int *)&i,sizeof(int));

出力結果

i_hex=3039
cの出力結果 3930000000

単純にmemcpyではダメなのでしょうか?

実行環境は、CentOS(32bit)+gccです。よろしくお願いします。

A 回答 (3件)

それで正常です。

コピーできてます。

39 30 00 00 00

は、1の位が 0x39 で、256の位が 0x30 で、それより上の位が 0 ということです。
左から1の位から順に表示させているので、逆に見えるだけ。
    • good
    • 0
この回答へのお礼

回答ありがとう御座います。正常であることが確認できて助かりました。
表示が逆順にみえるのは、表示のさせ方の問題なんですね。

お礼日時:2012/03/11 00:04

ど~でもいいけど,


c = (char *)malloc(sizeof(int));

memcpy(c,(int *)&i,sizeof(int));
のキャストって何をしたいんだろう.
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

指摘されて気がつきましたが、変数宣言を unsigned で宣言して、符号なしでキャストしてますね。。。。何がしたいんだろう とは、この事でしょうか?

お礼日時:2012/03/11 00:07

リトルエンディアン


ビッグエンディアン
を調べて見ましょう。

ただ移植性などを考慮するのであれば
その方法はお勧めしかねます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
出力結果を利用するときに、実行環境に依存してしまうという認識で合っていますか?

移植性を考えると、バイナリでコピーではなく、文字列として扱う方が一般的でしょうか?

リトルエンディアン・ビッグエンディアンについては、調べてみます。

お礼日時:2012/03/11 00:11

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