这题怎么搞的
来源:百度知道 编辑: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;
}
#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试了下,好像就是这个意思
把要求说清楚点
什么意思?