プロが教えるわが家の防犯対策術!

16進数を配列に格納するのに2文字ずつ格納したいのですがどうしたらいいですか。
例えば
num=ef23157をa[0]=57,a[1]=31,a[2]=f2,a[3]=0e,
のように1バイトずつ格納したいのですが、方法がわかりません。
お願いします。

教えて!goo グレード

A 回答 (6件)

答えを教えるのは禁止されてるのでヒントだけ



「&」と「>>」
    • good
    • 2
この回答へのお礼

ヒントありがとうございます。
解決しました。

お礼日時:2008/08/13 04:09

ビッグエンディアン環境でmemcpyすると逆順になるので、地道に1バイトずつ入れましょう。


for (i=0; i<4; i++, num>>=8) a[i]=num&0xff;
または、
for (i=0; i<4; i++, num/=256) a[i]=num%256;
    • good
    • 2
この回答へのお礼

1番さんの回答を実装してから見たのですが、こんなにすっきりしたプログラムにできるとはきづきませんでした。ありがとうございました。

お礼日時:2008/08/13 04:18

memcpyで転送できます。


環境が書いてないので、windows,visulal c++(visula studio2008)とします。
int a = 0x12345678;
char b[4];
memcpy(b,&a,4);
とすると
b[0] = 0x78;
b[1] = 0x56;
b[2] = 0x45;
b[3] = 0x12;
と同じことになります。
    • good
    • 0
この回答へのお礼

環境を書くのをすっかり忘れていました。
ボーランドCコンパイラーでした。
1番さんの回答で解決することができました。
ありがとうございました。

お礼日時:2008/08/13 04:15

用途にもよりますがリトルエンディアンなら無理やりキャストしても


unsigned char *a = (unsigned char*)(&num);

でも普通は回答#1ですね
    • good
    • 0
この回答へのお礼

一番さんの回答で解決しました。
回答ありがとうございました。

お礼日時:2008/08/13 04:13

「%」と「/」を使う方法もあるかもしれません。

    • good
    • 0
この回答へのお礼

1番さんの回答で解決しました。
回答ありがとうございました。

お礼日時:2008/08/13 04:12

一般論では #1.


特定の環境でのみ実行できればよいなら memcpy もあり.
    • good
    • 0
この回答へのお礼

すいません。環境を書いてませんでした。
解決しました。回答ありがとうございました。

お礼日時:2008/08/13 04:10

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

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング