c - 在不使用 union 的情况下,如何在 C 中将 64 个字节的数组视为 16 个整数的数组(反之亦然)?

标签 c arrays pointers types type-conversion

所以,在我的程序中,我有一个变量

uint32_t buffer[16];

但是,有些时候我需要把它当作

uint8_t char_buffer[64];

最明显的解决方案是 union 。但是,出于求知欲,是否有另一种方法告诉编译器我想将该数组视为某种任意类型的数组?类似的东西

((uint8_t *)buffer)[i]

?

最佳答案

类型转换方法是完美的。它将使使编译器将数组视为整数数组。在您的特定情况下,使用

((uint32_t *)buffer)[index];

然而,正如@JerryCoffin 指出的那样,有一个对齐问题。如果您将数组静态分配为 char [],则它不一定是 4 字节对齐的(整数需要对齐)。如果您确定要避免此问题,请使用 malloc(),因为它可以保证适当的对齐。

关于c - 在不使用 union 的情况下,如何在 C 中将 64 个字节的数组视为 16 个整数的数组(反之亦然)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11026435/

相关文章:

javascript - 如何在字符串中找到最长的单词并返回那些(不包括重复项)以及最大长度?

javascript - 谷歌地图不起作用,位置数组?

c++ - FILE* 在不同函数 c++ 中的初始化

c - 在C中将一行文本分成两个数组

c - 使用 fputc() 写入一个字节

C 结构指针作为参数 : making permanent changes to the struct

c - Int 类型不应该是平台字长的大小吗?

pointers - go:使用指针允许更改结构的内容。为什么?

C++:如何防止破坏参数中构造的对象?

c - 将代码加载到 GPU(Intel Sandy Bridge)