#include<stdio.h>#include<string.h>#PRagma pack(4)int main(){ unsigned char puc[4]; struct tagPIM //位断大小占2个字节 { unsigned char ucPiml; //1 unsigned char ucData0 : 1; //1 unsigned char ucData1 : 2; // unsigned char ucData2 : 3; // }*pstPimData; pstPimData = (struct tagPIM*)puc; memset(puc, 0, 4); pstPimData->ucPiml = 2; //0000 0010 因为ucPiml占一个字节,所以puc[0]里面存的就是00000010,因此puc[0]=0x00; pstPimData->ucData0 = 3; //0000 0011 因为unData0只占一个字节,所以截取3的二进制序列低位的1个字节即1,存入到puc[1]的低位第一个字节 pstPimData->ucData1 = 4; //0000 0100 因为unData1占2个字节,所以截取4的二进制序列低位的2个字节即00,存入到puc[1]的从低位起第2、3字节 pstPimData->ucData2 = 5; //0000 0101 因为unData2占3个字节,所以截取5的二进制序列低位的3个字节即101,存入到puc[1]的从低位起第4、5、6字节 //最终puc[1]内的数字的二进制序列为:00101001 即0x29 printf("%02x %02x %02x %02x/n", puc[0], puc[1], puc[2], puc[3]); //因为位断只占两个字节,所以数组的puc[3]和puc[4]为空; system("pause"); return 0;}
新闻热点
疑难解答