gpt4 book ai didi

c - C语言从地址读取8位或16位或32位

转载 作者:行者123 更新时间:2023-11-30 19:36:19 24 4
gpt4 key购买 nike

#include <stdio.h>
#define READ8(Address) \
(*((volatile long *)(Address)))
int main()
{
int Array[2];
long out_value;
Array[0] = 55;
Array[1] = 66;
out_value = READ8(&Array[0]);
printf("%d\n", out_value);
}

我正在尝试读取8位数据、16位数据和32位数据并存储在out_value变量中。我通过将宏中的数据类型更改为 int/long 来更改数据类型的读取大小,但每次输出都仅打印为 55。

我想打印为 55 和 5566。

最佳答案

指针类型之间的转换不可移植,并且会由于未对齐的访问或编译器优化而严重中断。 (合理)可移植的方法是使用 memcpy:

unsigned int a[1000] = {...};
unsigned long long x;
memcpy(&x, &a[57], sizeof(unsigned long long))

不用担心额外的函数调用——gcc 和 clang 都会识别这种模式并优化对 memcpy 的调用。

关于c - C语言从地址读取8位或16位或32位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41020850/

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