gpt4 book ai didi

c - 返回 int 的第二个字节的地址或值

转载 作者:太空宇宙 更新时间:2023-11-04 02:53:50 25 4
gpt4 key购买 nike

我在 c 中声明了一个 int 并分配了一个值。在内存中它看起来像下面这样

地址为 0x20002AD4 的 0x78 0x01 0x00 0x00

我需要从 int 的第一个和第二个字节中提取值。我已经使用以下代码成功提取了第一个字节(参见 packet[2])

int dataSize = (lightCount * 3) + 1;
unsigned char packet[totalSize];

packet[0] = 0x7E;
packet[1] = 0x06;
packet[2] = (unsigned char)*(&dataSize); //dataSize LSB - THIS WORKS
packet[3] = (unsigned char)*(&dataSize + 1); //dataSize MSB - THIS DOES NOT

但是,当我尝试使用指针算法返回 int 中第二个字节的值时(请参阅 packet[3]),它反而返回第 4 个字节。我认为这是因为 int 的大小为 4 个字节,因此地址上的 +1 会移动 4 个字节。

谁能建议我如何返回第二个字节中的值,即在上面的示例中我想返回 0x01

最佳答案

这是给定代码的完整示例程序(经过修改以获取字节的第二部分):

#include <stdio.h>

int main() {
int dataSize = 0x7E06;
unsigned char packet[4];

packet[0] = 0x7E;
packet[1] = 0x06;
packet[2] = (unsigned char)dataSize;
packet[3] = *(((unsigned char*)&dataSize) + 1);

printf("%d, %d, %d, %d\n", packet[0], packet[1], packet[2], packet[3]);
}

在我的电脑上,这将输出 126, 6, 6, 126。在其他架构上,字节可能会颠倒。

关于c - 返回 int 的第二个字节的地址或值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19480173/

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