如何使用位域获取整行位?

How to use bit field to get whole row bits?

#include <stdio.h>
#include <stdint.h>

struct __attribute__((__packed__)) sf_header
{
    uint64_t lower: 32;
    uint64_t higher: 32;
};
int main()
{
    struct sf_header h;

    // part 1;
    h.lower = 15;
    h.higher = 1;

    printf("lower part: %d\n", h.lower);
    printf("higher part: %d\n", h.higher);

    //part 2: how to printf the whole 64-bits (a row)
    unsigned long int lower = h.lower;
    unsigned long int higher = h.higher;
    higher = higher << 32;

    printf("lower: %ld\n", lower);
    printf("higher: %ld\n", higher);

    unsigned long int final = lower | higher;
    printf("Final: %ld\n", final);


    return 0;
}

它在 64 位上运行,long int 是 8 个字节,这是一个行大小。

首先,我将两个值赋给低32位和高32位。

如果我想获取64位并使用它怎么办?

我需要做第 2 部分吗?或者有一种简单的位域方法可以做到吗?

风向标略微领先我...!

您使用工会。在 Win32 headers(不确定我喜欢它)中有一个叫做 ULARGE_INTEGER 但这里有一个快速联合示例,它对联合进行了平行处理:

typedef union {
  struct {
    int32_t LowPart;
    int32_t HighPart;
  } u;
  uint64_t QuadPart;
} ULARGE_INTEGER;

因此,如果您有 ULARGE_INTEGER a,a.QuadPart 将为您提供 64 位部分,而 a.u.LowPart 将为您提供低 32 位。或者高 32 位,如果你的机器是 big-endian!