我尝试将一些信息分配给'char'数据(一种结构和一个整数值),但是在分配它之后,我无法将其读回。有什么办法吗?我在安装在virtualbox上的Ubuntu 16.04上工作
struct opcode_struct{
uint8_t a;
uint8_t b;
uint8_t c;
uint8_t d;
};
union opcode{
uint32_t uint32code;
struct opcode_struct code;
};
struct request{
//4
union opcode opc;
//4
uint32_t id;
};
int main()
{
char *buff = (char*)malloc(32);
struct request rq = {0x00000001, 0}, *ptr_rq = &rq;
int val = 512, *ptr_int = &val;
memcpy(buff, ptr_rq, sizeof(rq));
memcpy((buff+sizeof(rq)), ptr_int, sizeof(int));
printf("Request opcode: 0x%08x\n", *buff);
printf("Request id: %d\n", *(buff+sizeof(uint32_t)));
printf("Int value: %d\n", *(buff+sizeof(rq)));
free(buff);
return 0;
}
显示的文字: 要求操作码:0x00000001 要求编号:0 整数值:0
但Int值应等于“ 512”
答案 0 :(得分:0)
您要取消引用buff+sizeof(rq)
,即char *
。由于512是0x 02 00
,因此如果将其取消引用为char *
,则会得到0x00
。如果您查看buff+sizeof(rq) + 1
,则会得到另一个0x02
。
另一方面,如果将指针投射到int *
,则将获得完整的0x0200
。
printf("Int value: %d\n", *(int *)(buff+sizeof(rq)));
输出512。