質問

これを行う効率的な方法はありますか

役に立ちましたか?

解決

それはあなたがユニオンを使用することができるものです:

union {
    UINT64 ui64;
    struct {
        DWORD d0;
        DWORD d1;
    } y;
} un;

un.ui64 = 27;
// Use un.y.d0 and un.y.d1

例(Linixでは異なるタイプを使用):

#include <stdio.h>
union {
    long ui64;
    struct {
        int d0;
        int d1;
    } y;
} un;
int main (void) {
    un.ui64 = 27;
    printf ("%d %d\n", un.y.d0, un.y.d1);
    return 0;
}

これは以下を生成します。

27 0

他のヒント

WindowsプラットフォームでLARGE_INTEGERを使用した例を提供すると思います。 &quot; value&quot;という変数がある場合それは64ビットです、それから私はします:

LARGE_INTEGER li;
li.QuadPart = value;
DWORD low = li.LowPart;
DWORD high = li.HighPart;

はい、これはそれをコピーしますが、私はそれが読みやすいのが好きです。

64ビット整数には、すべてのプラットフォームで少なくとも32ビット整数と同等のアライメント制限があることに注意してください。したがって、64ビット整数へのポインターを32ビットへのポインターとしてキャストすることは完全に安全です。

ULONGLONG largeInt;
printf( "%u %u\n", ((DWORD *)&largeInt)[ 0 ], ((DWORD *)&largeInt)[ 1 ] );

明らかに、Paxのソリューションは非常にクリーンですが、データコピーを必要としないため、技術的に効率的です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top