- ベストアンサー
16進数を2文字ずつ配列に格納したい
16進数を配列に格納するのに2文字ずつ格納したいのですがどうしたらいいですか。 例えば num=ef23157をa[0]=57,a[1]=31,a[2]=f2,a[3]=0e, のように1バイトずつ格納したいのですが、方法がわかりません。 お願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
答えを教えるのは禁止されてるのでヒントだけ 「&」と「>>」
その他の回答 (5)
- JaritenCat
- ベストアンサー率37% (122/322)
ビッグエンディアン環境で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;
お礼
1番さんの回答を実装してから見たのですが、こんなにすっきりしたプログラムにできるとはきづきませんでした。ありがとうございました。
- tatsu99
- ベストアンサー率52% (391/751)
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; と同じことになります。
お礼
環境を書くのをすっかり忘れていました。 ボーランドCコンパイラーでした。 1番さんの回答で解決することができました。 ありがとうございました。
- php504
- ベストアンサー率42% (926/2160)
用途にもよりますがリトルエンディアンなら無理やりキャストしても unsigned char *a = (unsigned char*)(&num); でも普通は回答#1ですね
お礼
一番さんの回答で解決しました。 回答ありがとうございました。
- asuncion
- ベストアンサー率33% (2127/6290)
「%」と「/」を使う方法もあるかもしれません。
お礼
1番さんの回答で解決しました。 回答ありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
一般論では #1. 特定の環境でのみ実行できればよいなら memcpy もあり.
お礼
すいません。環境を書いてませんでした。 解決しました。回答ありがとうございました。
お礼
ヒントありがとうございます。 解決しました。