探索结构封装
Explore structure packaging
我想了解结构是如何存储在小端机器上的,以及在压缩变量的情况下。
假设我有以下带位域的结构:
struct my_struct {
short a;
short b: 6;
short c: 10;
int d;
int e: 28;
int f: 4;
}
谁能解释一下这个结构是如何在内存中布局的。
将每个成员设置为 1
并探索结构的位表示:
#include <stdio.h>
#include <limits.h>
struct my_struct {
short a;
short b : 6;
short c : 10;
int d;
int e : 28;
int f : 4;
};
int main(void) {
struct my_struct my_struct;
my_struct.a = 0x1;
my_struct.b = 0x1;
my_struct.c = 0x1;
my_struct.d = 0x1;
my_struct.e = 0x1;
my_struct.f = 0x1;
int size = sizeof(my_struct);
for (int i = 0; i < size; ++i) {
unsigned char byte = *((unsigned char *)&my_struct + i);
for (int i = CHAR_BIT - 1; i >= 0; --i) {
printf((byte >> i) & 0x1 ? "1" : "0");
}
printf(" ");
}
getchar();
return 0;
}
我想了解结构是如何存储在小端机器上的,以及在压缩变量的情况下。
假设我有以下带位域的结构:
struct my_struct {
short a;
short b: 6;
short c: 10;
int d;
int e: 28;
int f: 4;
}
谁能解释一下这个结构是如何在内存中布局的。
将每个成员设置为 1
并探索结构的位表示:
#include <stdio.h>
#include <limits.h>
struct my_struct {
short a;
short b : 6;
short c : 10;
int d;
int e : 28;
int f : 4;
};
int main(void) {
struct my_struct my_struct;
my_struct.a = 0x1;
my_struct.b = 0x1;
my_struct.c = 0x1;
my_struct.d = 0x1;
my_struct.e = 0x1;
my_struct.f = 0x1;
int size = sizeof(my_struct);
for (int i = 0; i < size; ++i) {
unsigned char byte = *((unsigned char *)&my_struct + i);
for (int i = CHAR_BIT - 1; i >= 0; --i) {
printf((byte >> i) & 0x1 ? "1" : "0");
}
printf(" ");
}
getchar();
return 0;
}