gpt4 book ai didi

c++ - 将原始字节转换为任何数据类型

转载 作者:行者123 更新时间:2023-12-05 00:42:46 25 4
gpt4 key购买 nike

我担心我的实现是否不安全或可以改进。假设我有一个字节数组(更具体地说,std::byte);将元素的地址转换为 void 指针,然后转换为任何安全的数据类型?

template <typename To>
constexpr To *byte_cast(std::byte &From) {
return static_cast<To *>(static_cast<void *>(&From));
}

// or rather
template <typename To>
constexpr To *byte_cast(std::byte *From) {
return static_cast<To *>(static_cast<void *>(From));
}

我避免使用 reinterpret_cast,因为它不可靠。请注意,我希望 T * 保持它被转换的字节的相同地址。

我确实想到数组可能不适合数据类型,或者字节序可能会导致问题,但在我的问题得到回答后,这两个问题都会得到解决。

最佳答案

您的配对static_cast s 完全等同于 reinterpret_cast .由于严格的别名违规,两者都会导致 UB(目标类型为 charunsigned charstd::byte 时除外)。

解决方案是 std::bitcast<T>(source) .它的界面与您尝试的类似,只是它按值返回。不可能有会返回指针/引用的“安全 reinterpret_cast”。

一个不太现代的替代方案是std::memcpy .

关于c++ - 将原始字节转换为任何数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72079593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com