这题怎么搞的

来源:百度知道 编辑:UC知道 时间:2024/06/07 01:01:50
#include<iostream.h>

#include <string.h>

#include <malloc.h>

#include <stdio.h>

#include <stdlib.h>

#include <memory.h>

typedef struct AA
{
int b1:5;

int b2:2;

}AA;

void main()

{

AA aa;

char cc[100];

strcpy(cc,"0123456789abcdefghijklmnopqrstuvwxyz");
cout<<cc<<endl;
memcpy(&aa,cc,sizeof(AA));

cout << aa.b1 <<endl;
cout << aa.b2 <<endl;

}

AA这个结构使用了位段,其中b1占了一个字节中的0-4位,b2占了5,6位.

memcpy(&aa,cc,sizeof(AA));
实际上只是将cc中的前几个字节拷给了aa,这个字节数可能在不同的编译器中不一样,可能是1,也可能是4.我用的VC6里面sizeof(AA)=4,所以是4字节.
但不管拷几个字节,字符'0'肯定是拷给了aa的最低字节,因此aa.b1,aa.b2,实际上就是字符'0'所对应的单字节ASCII码的0-4位和5-6位.

字符'0'的ASCII码是48,对应二进制是00110000,因此aa.b1就是10000,aa.b2就是01,转换成有符号十进制数就是-16,1

memcpy(&aa,cc,sizeof(AA));这里错了 不能主要 因为你cc是一个数组 你要往结构体放整型数据这些 不能用memcpy 用这个应该要结构一样才可以

tanyuguo - 榜眼 十二级 果然是高手,我用vc试了下,好像就是这个意思

把要求说清楚点

什么意思?