#pragma pack字节对齐

#pragma pack(2) 按照2个字节进行对齐

#pragma pack(4) 按照4个字节进行对齐

不写,就按照编译器进行字节对齐

 

#include <stdio.h>
#include <string.h>
using namespace std;
# pragma pack(4)
struct ta{
     unsigned  char a; // 1 Byte
     unsigned  long  long b; // 8 Byte
     unsigned  short c; // 2 Byte
     char a1[3];
};

# pragma pack(2)
struct tb{
     unsigned  char a; // 1 Byte
     unsigned  long  long b; // 8 Byte
     unsigned  short c; // 2 Byte
     char a1[5];
};

void dump( void *t,  int size){
     printf("---- @%x size = %2d ----\n", ( int)t, size);
     for ( int i = 0; i < size; ++i){
         printf("%2d: %x\n", i, *(( char*)t+i));
    }
     printf("-------------------\n");
}

int main(){
    ta a;
    memset(&a, 0,  sizeof(ta));
    a.a = 0xff;
    a.b = 0xffffffffffffffffull;
    a.c = 0xffff;
    dump(&a,  sizeof(ta));

    tb b;
    memset(&b, 0,  sizeof(tb));
    b.a = 0xff;
    b.b = 0xffffffffffffffffull;
    b.c = 0xffff;
    dump(&b,  sizeof(tb));
     return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值