这是我的缓冲区,任何人都可以解释如何在其中存储十六进制值,当我尝试打印buffer[0]
时,它打印0而不是500.我正在尝试填充元素ID为11位的缓冲区,我知道char是1字节,即8位,它不能存储该值。我有其他元素填充到缓冲区,它们是char类型。所以我无法将缓冲区的类型从char更改为int。我怎样才能解决我的问题。
char *buffer;
buffer = (char *)malloc(10*(sizeof(frameRd))); //frameRd is of 16bytes
buffer[0] = frameRd->id;
for(int i =1;i<15;i++)
{
buffer[i] = frameRd->data;
}
for(int i =0,i<16;i++)
{
printf("%4X",buffer[i]);
}
其中frame->id = 0x500;
当我在控制台上打印此值时,它将buffer[0]
打印为0并且肯定是因为
答案 0 :(得分:0)
由于buffer
为char*
,buffer[0]
为char
。因此,分配
buffer[0] = frameRd->id;
表示“将frameRd->id
截断为char
,并将结果存储在buffer[0]
中”,即完全符合您所观察到的效果。此外,当您使用buffer[0]
打印%4X
时,仅打印buffer[0]
的值,转换为int
。
如果您希望将int
或整个struct
放入char[]
缓冲区,请使用memcpy
:
// Do not cast results of malloc
buffer = malloc(10*(sizeof(frameRd)));
// Save id into the buffer at index 0
memcpy(&buffer[0], &frameRd->id, sizeof(frameRd->id));
// Pull id back
int tmpId;
memcpy(&tmpId, &buffer[0], sizeof(tmpId));
printf("%04x\n", tmpId);