uint8_t类型的数组的元素是否总是打包到连续的内存字节中?

问题描述 投票:2回答:1

我有一个用C编写的程序,该程序处理24位音频样本并将其打包为RTP数据包,以便在网络上传输。

[我的代码将'sample'定义为int32_t和数组uint8_t [4]的并集,这样我可以对整个样本执行算术运算,还可以访问其各个字节以打包到RFC3190中指定的L24编码方案中。

这种方法在使用gcc进行编译的ARM和基于Intel的系统上都运行良好。但是,我担心其他一些编译器或体系结构可能会填充uint8_t元素,从而破坏我的程序。这是一个有效的问题吗?如果是这样,是否有更好的方法可以处理音频数据?

c arrays audio audio-streaming unions
1个回答
0
投票

尽管[u]intN_t类型是可选的,但使用它们应该安全。参见C11 p7.20.1.1

  1. typedef名称uintN_t指定宽度为N并且没有填充位的无符号整数类型。

如果您碰巧使用实现[[0]则不会编译uint8_t

© www.soinside.com 2019 - 2024. All rights reserved.