interpret_cast的持久性
Endianness on reinterpret_cast
我有一个指向uint8_t aray的指针。每两个元素实际上都是uint_16_t值,我想使用reinterpret_cast
:
uint16_t *Dst16Rgb = reinterpret_cast<uint16_t*>(Dst8Rgb);
输出的端序错误,如果我想在小端序或大端序上指定reinterpret_cast
,有没有方法?
谢谢!
我有一个指向uint8_t aray的指针。每两个元素实际上是一个uint_16_t
要么实际上有一个uint8_t
的数组,要么实际上有uint_16_t
的数组。不可能两者兼而有之。
uint16_t *Dst16Rgb = reinterpret_cast<uint16_t*>(Dst8Rgb);
由于在所指向的地址处没有uint16_t
对象,因此通过重新解释指针进行分离将具有未定义的行为。
即使禁用了严格混叠,也仍然存在UB,除非您保证字节数组对uint_16_t
足够对齐。
如果我想在little或big endian上执行,有没有一种方法可以指定reinterpret_cast?
否。数据总是以本机端序重新存储。如果输入的字节具有不同的字节序,那么结果将是"错误的"。
您必须知道输入数据的字节序。您可以将字节读取为多字节整数,而无需通过移位和屏蔽来了解本机端序。
相关文章:
- 如何理解C++标准N3337中的expr.const.cast子句8
- C++Cast运算符过载
- 当比特(而不是字节)的顺序至关重要时的持久性
- 乘以整数的持久性
- MSI 安装的数据持久性
- 错误:"cast"未命名类型void setCastDescription(std::string
- 通过使用 const-cast 的非常量引用来延长临时的寿命
- "(void) cast"与功能有什么区别 "__attributes__"来沉默未使用的参数警告?
- interpret_cast的持久性
- C++ 多索引表 - EOS 持久性 API
- C++:"Expected '(' for function-style cast or type construction"错误
- 字符串反向迭代器自追加的持久性
- 在确保遵循 SOLID 的同时,为 C++ 中的许多类设计持久性模型的最佳方法是什么?
- 为什么选择 g++ 给予者:"error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]"
- Gtk+ g_signal_connect() 和 C++ lambda 会导致"invalid cast"错误
- Shared_ptr cast vs static_cast speed
- 在 iOS 上使用 Aruco 构建 OpenCV 时"Functional-style cast from id to double is not allowed"
- 覆盖 CAST 运算符(我认为它被称为向下转换)
- 何时使用 "Static" 进行持久性
- C++错误,隐 <function-style-cast> 式要求使用模板化类一次调用多个构造函数的多个转换