gpt4 book ai didi

c - 正在存储截断的值

转载 作者:行者123 更新时间:2023-11-30 16:32:33 25 4
gpt4 key购买 nike

这是我的缓冲区,任何人都可以解释一下如何在其中存储十六进制值,当我尝试打印 buffer[0] 时,它打印 0 而不是 500。我正在尝试要使用 11 位的 ID 填充缓冲区的元素,我知道字符是 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,这肯定是因为

最佳答案

由于 bufferchar*,因此 buffer[0]char。因此,任务

buffer[0] = frameRd->id;

表示“将frameRd->id截断为char,并将结果存储在buffer[0]”中,即与你正在观察。此外,当您使用 %4X 打印 buffer[0] 时,您将单独打印 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.

关于c - 正在存储截断的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50090259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com