• ベストアンサー

UINT64→UINT32[2]にする方法

UINT64 の値を、UINT32の配列[2]に格納する方法を教えてください。 シフト演算がよくわかりません。

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

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

UINT64 a; UINT32 b[2]; aの値が0xAAAAAAAAEEEEEEEEとして 上位32ビット(0xAAAAAAAA)をb[0] 下位32ビット(0xEEEEEEEE)をb[1]に格納したいのなら b[0] = a >> 32;(aの上位32ビットぶんを右へ32ビットシフトした結果を格納) b[1] = 0xFFFFFFFFLL & a;(aの上位32ビット分を全て0にして、下位32ビットぶんのみを格納) とすれば、格納できます。

manta-55
質問者

お礼

ご回答ありがとうございます。 下位32ビットはこういうふうに格納するんですね。 勉強になりました。

その他の回答 (4)

回答No.4

他のシステムに受け渡す必要がなければ、 union { UINT64 U64; UINT32 U32[2]; } transWk; という変数を定義して、 transWk.U64 = 値; で、 transWk.U32[0] と、transWk.U32[1] を参照するとか、 逆に、 transWk.U32[0] = 値; transWk.U32[1] = 値; で、transWk.U64 を参照するとかでできることが多いです。 もっと単純には、 UINT64 a; UINT32 b[2]; に対して、 b[0] = a / 0x10000; b[1] = a % 0x10000; で変換するとか。 逆に戻すには、 a = b[0] * 0x10000LL + b[1]; // こっちは 0x10000 に LL のサフィックスが必要なはず とか、そういう方法もあります。

manta-55
質問者

お礼

ご回答ありがとうございます。 戻し方まで教えて頂いて、とても勉強になりました。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

UINT64とかUINT32の素性がわかりません(想像は付きますが...)。 標準外の用語を使うのであれば、その定義を明確にしてください。

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

「シフト演算がよくわからない」とはどういうことでしょうか? 自然に書けばいいのですが.

回答No.1

UINT64 a; UINT32 b[2]; memcpy((void*)b, (void*)&a, sizeof(UINT64)); とか?

manta-55
質問者

お礼

ご回答ありがとうございます。 シフト演算を使用しての実現方法を考えていました。 参考にします。

関連するQ&A

専門家に質問してみよう