• ベストアンサー

16進数を2文字ずつ配列に格納したい

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

質問者が選んだベストアンサー

  • ベストアンサー
  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

答えを教えるのは禁止されてるのでヒントだけ 「&」と「>>」

cabcl420
質問者

お礼

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

その他の回答 (5)

回答No.6

ビッグエンディアン環境で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;

cabcl420
質問者

お礼

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

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.5

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; と同じことになります。

cabcl420
質問者

お礼

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

  • php504
  • ベストアンサー率42% (926/2160)
回答No.4

用途にもよりますがリトルエンディアンなら無理やりキャストしても unsigned char *a = (unsigned char*)(&num); でも普通は回答#1ですね

cabcl420
質問者

お礼

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

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.3

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

cabcl420
質問者

お礼

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

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

一般論では #1. 特定の環境でのみ実行できればよいなら memcpy もあり.

cabcl420
質問者

お礼

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