c++ - 如何访问一个 32 位寄存器数组和读/写 16 位高段和低段作为一个单独的操作

标签 c++ arrays pointers struct

我有一个包含 320 位的连续内存区域,分为 10 个独立的“寄存器”。

创建内存区域后,我会取回第一个寄存器元素的地址。

此时,我想逻辑映射一个包含32位数字的高位和低位的32位结构数组,然后遍历数组,分别写入高位和低位。

我已经有一个函数可以使用位旋转方案将 32 位数字拆分并输入到两个 16 位部分。

我的问题是,将结构数组覆盖在连续区域上的最佳方法是什么。

我需要这样做的原因是我正在使用外部库与嵌入式设备通信,而该库没有 32 位的概念,即使底层设备将数据存储在 32 位寄存器中。

最佳答案

首先,确保您的结构是编译器表示的 32 位。检查 sizeof(struct xxx) == 4 并使用编译器打包选项直到它是(从技术上讲这确保 struct 是 4 个字符,但它应该足够好)。

第二种是只创建一个指向结构类型对象的指针,然后将内存块的地址分配给它。您将需要一个老式的类型转换操作来执行此操作。

类似的东西(注意高低顺序以及其中哪些字节因硬件而异)。

typedef struct {
   short high;
   short low;
} hilo;

hilo *registers = (hilo *) memPtr;

关于c++ - 如何访问一个 32 位寄存器数组和读/写 16 位高段和低段作为一个单独的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13663814/

相关文章:

c++ - 如何在本地重新定义 boost::shared_ptr?

php - 将数组限制为 5 个项目

通过指针将整数转换为 float

c - 如何在 C 中返回数组中最大的两个数?

c++ - constexpr 全局类类型

c++ - 如何循环继承自 boost::any 中包含的 std::vector 的类

javascript - 遍历二维数组并将数据提取到新数组

java - 对来自 Matlab 背景的 Java 数组进行索引

delphi指针问题

c++ - 有关扩展类(class)能力的最佳方法的建议