#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct base64{
unsigned d1:6;
unsigned d2:6;
unsigned d3:6;
unsigned d4:6;
};
int main()
{
char buf[10]=”qwertyui”;
struct base64 *bs=(struct base64 *)buf;
printf(“d1=%u ,d2=%u, d3=%u, d4=%u\n”,bs->d1,bs->d2,bs->d3,bs->d4);
}
运行结果:
d1=49 ,d2=29, d3=23, d4=25
演示:
q=01110001
w=01110111
e=01100101
qwe_buf=011100010111011101100101
#include <stdlib.h>
#include <string.h>
struct base64{
unsigned d1:6;
unsigned d2:6;
unsigned d3:6;
unsigned d4:6;
};
int main()
{
char buf[10]=”qwertyui”;
struct base64 *bs=(struct base64 *)buf;
printf(“d1=%u ,d2=%u, d3=%u, d4=%u\n”,bs->d1,bs->d2,bs->d3,bs->d4);
}
运行结果:
d1=49 ,d2=29, d3=23, d4=25
演示:
q=01110001
w=01110111
e=01100101
qwe_buf=011100010111011101100101
d1=011100 = 28
d2=010111 = 25
d3=011101 = 29
d4=100101 = 37
ewq_buf=011001010111011101110001
d4=011001 25
d3=010111 23
d2=011101 29
d1=110001 49
谁知道这是为什么呢
解决方案
5
一个位域必须存储在同一个字节中,不能跨两个字节。如一个字节所剩空间不够存放另一位域时,应从下一单元起存放该位域.
10
1. 一个位域必须存储在同一个字节中,不能跨两个字节。如一个字节所剩空间不够存放另一位域时,应从下一单元起存放该位域。也可以有意使某位域从下一单元开始。
2. 由于位域不允许跨两个字节,因此位域的长度不能大于一个字节的长度,也就是说不能超过8位二进位。
2. 由于位域不允许跨两个字节,因此位域的长度不能大于一个字节的长度,也就是说不能超过8位二进位。
30
你先把位域设成8Byte 的看看是什么结果
然后再设成6Bits的,这样就好理解了
然后再设成6Bits的,这样就好理解了
union bs64{ struct base64{ unsigned d1:6; unsigned d2:6; unsigned d3:6; unsigned d4:6; } bs6; struct base64{ unsigned c1:8; unsigned c2:8; unsigned c3:8; unsigned c4:8; } bs8; }; bs64 *p =“123456”;
这样看看