如何不使用reinterpret_cast将char* buffer转换为const uint8*
合法实现char到const uint8_t的类型转换方案
通常标准库中uint8_t是unsigned char的别名,这种场景下有两种符合开发规范、不需要使用reinterpret_cast的实现方式:
- 方式1:使用C风格显式转换
代码示例:
该转换符合C++严格别名规则,因为char、signed char、unsigned char三类指针允许互相转换访问对应内存对象,不会出现未定义行为。char* buf = /* 你的缓冲区指针 */; const uint8_t* uint_buf = (const uint8_t*)buf; - 方式2:通过两次
static_cast完成转换
如果开发规范也限制C风格转换,可以走合法的中间类型转换路径:
代码示例:
先将char* buf = /* 你的缓冲区指针 */; const uint8_t* uint_buf = static_cast<const uint8_t*>(static_cast<const void*>(buf));char*转为const void*是static_cast的合法用法,再从const void*转为const uint8_t*同样符合语法要求,全程不需要用到reinterpret_cast。
注意:需要先确认开发环境中
uint8_t确实是unsigned char的别名,该条件在绝大多数通用C++实现环境中都成立。如果遇到极特殊场景下uint8_t为自定义类型的情况,可以按字节拷贝到独立的uint8_t缓冲区中即可,该场景实际开发中出现概率极低。
内容的提问来源于stack exchange,提问作者anaisB
相关产品推荐
相关产品推荐

