正在存储截断的值

时间:2018-04-29 19:04:26

标签: c arrays char hex

这是我的缓冲区,任何人都可以解释如何在其中存储十六进制值,当我尝试打印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并且肯定是因为

1 个答案:

答案 0 :(得分:0)

由于bufferchar*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);

Demo.