プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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ビットぶんのみを格納)
とすれば、格納できます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/11/22 21:26

他のシステムに受け渡す必要がなければ、



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 のサフィックスが必要なはず

とか、そういう方法もあります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/11/22 21:23

UINT64とかUINT32の素性がわかりません(想像は付きますが...)。


標準外の用語を使うのであれば、その定義を明確にしてください。
    • good
    • 0

「シフト演算がよくわからない」とはどういうことでしょうか?


自然に書けばいいのですが.
    • good
    • 0

UINT64 a;


UINT32 b[2];

memcpy((void*)b, (void*)&a, sizeof(UINT64));

とか?
    • good
    • 1
この回答へのお礼

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

お礼日時:2010/11/09 22:38

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