位域 x86 小端

#include <stdio.h>

typedef struct {
    unsigned char a:6;
    unsigned char b:1;
    unsigned char c:1;
} STRUCT_A;

int main ()
{
    STRUCT_A struct_a;
    struct_a.a = 0x3a;
    struct_a.b = 0x1;
    struct_a.c = 0x1;

    printf ("sizeof (STRUCT_A) = %d\n", sizeof (STRUCT_A)); // 1

    /* 0x3a 0x1 0x1 */
    unsigned char  *d;
    d = (unsigned char *)&struct_a;
    printf ("*d = 0x%x\n", (*d)&0x3F); // x86 *d = 0x3a
    return 0;
}






#include <stdio.h>

typedef struct {
    unsigned int a:11;
    unsigned int b:5;
    unsigned int c:16;
} STRUCT_A;


/*

  c:16                b:5     a:11
  0000 0000 0000 0001 10110   101 0101 1110
  H                                       L


  c:16                b:5   a:11
  0000 0000 0000 0001 1011 0101 0101 1110
  H                                     L

  小端,获取4字节的数据从H开始读取

 */


int main ()
{
    STRUCT_A struct_a;
    struct_a.a = 0x55E;
    struct_a.b = 0x16;
    struct_a.c = 0x1;

    printf ("sizeof (STRUCT_A) = %d\n", sizeof (STRUCT_A)); // 4

    /* 0x55E 0x16 0x1 */
    unsigned int  *d;
    d = (unsigned int *)&struct_a;
    printf ("*d = 0x%x\n", (*d));       // x86 0x1b55e
    printf ("*d = 0x%x\n", (*d)&0x7FF); // x86 0x55e

    unsigned char *i;
    i = (unsigned char *)&struct_a;
    printf ("*i = 0x%x\n", *i);         // 0x5e
    /* 1 byte binary  0101 1110 */
    /* 2 byte binary  10110 101 ==> 1011 0101 */
    printf ("*(i+1) = 0x%x\n", *(i+1)); // 0xb5

    return 0;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值