如何使用位域获取整行位?
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!
#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!