- ベストアンサー
VC++2010: BYTE型配列に大きい桁数を代入する方法
- VC++2010で大きな桁数の数値をBYTE型の配列に代入する方法について質問です。具体的なプログラムの方法がわからず困っています。
- 質問者は、例えば18000などの大きな10進数をBYTE型の配列に代入する方法を知りたいという問題に直面しています。
- 質問者は最大値が16777216の大きな桁数を持つ数値を三つのBYTE型変数に分割して代入する方法を求めています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ビット演算とマスク演算を組み合わせる。 値をvalueとすると、たとえば int v=value-1; // 1≦value≦16777216に限る unsigned byte b1, b2, b3; b1=v>>16; b2=(v>>8)&0xff; b3=v&0xff;
その他の回答 (2)
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
「大きい数」に対する演算がきちんとできるということだと思いますので、 int a = 18000; BYTE bValue1 = a / 0x10000; a %= 0x10000; BYTE bValue2 = a / 0x100; a %= 0x100; BYTE bValue3 = a; で、できるような気がしますが。 また、これは、十六進数の区切りを基準にしたものですが、10進数ベースで、 BYTE bValue1 = a / 10000; a %= 10000; BYTE bValue2 = a / 100; a %= 100; BYTE bValue3 = a; として、それじれ 0 - 99 の範囲で格納するという処理も、要求に合致すれば、問題はないです。
お礼
上記の通りにすると無事なりました。ありがとうございます
- Wr5
- ベストアンサー率53% (2173/4061)
>例:16777216を三つのBYTE型変数にいれると。。。 >BYTE bValue1 = 255; >BYTE bValue2 = 255; >BYTE bValue3 = 255; 16777216を16進数表記にすると、0x1000000です。 ので3バイトには収まらないと思われますが、その辺はどうなんでしょう? 16777215(0xFFFFFF)の間違いですか? 0x123456を格納する場合は、bValue1~bValue3はそれぞれどんな値になるように格納したいのでしょうか? # ビット演算で入れられるとは思いますけどね……。 bValue1 = 0x12 bValue2 = 0x34 bValue3 = 0x56 としたいのであれば、 bValue1 = (BYTE)((0x123456 >> 16) & 0x000000FF); bValue2 = (BYTE)((0x123456 >> 8) & 0x000000FF); bValue3 = (BYTE)(0x123456 & 0x000000FF); って感じでしょうか……。
お礼
ご回答誠にありがとうございます。 16777215の間違いでした。 上記の通りにすると無事なりました。ありがとうございます
お礼
上記の通りにすると無事なりました。今回は誠にありがとうございます 数ある中からこの人をベストアンサに決定させていただきました