gpt4 book ai didi

c++ - 什么类型的转换适合从 unsigned char* 转换为 char*?

转载 作者:行者123 更新时间:2023-12-01 14:35:51 27 4
gpt4 key购买 nike

当我将数据写入缓冲区或从缓冲区写入数据以保存到文件时,我倾向于使用 std::vector<unsigned char> ,并且我将这些无符号字符视为可写入任何内容的字节,因此:

int sizeoffile = 16;
std::vector<unsigned char> buffer(sizeoffile);

std::ifstream inFile("somefile", std::ios::binary | std::ios::in);
inFile.read(buffer.data(), sizeoffile); // Argument of type unsigned char* is incompatible
// with parameter of type char*

ifstream::read() 的第一个参数想要一个 char指针,但我的 vector 缓冲区是 unsigned char .什么样的 Actor 适合在这里将数据读入我的缓冲区?它本质上是一个 char*unsigned char* .我可以使用 reinterpret_cast 或 C 风格的转换,但这让我觉得我做错了什么,因为根本不经常推荐这些。我是否为缓冲区选择了错误的数据类型(unsigned char)?

最佳答案

最安全的做法是不要直接使用强制转换,而是使用一个辅助模板,该模板将自身限制在具有兼容表示的类型之间进行强制转换。

template<typename T, typename U>
treat_as(U* ptr) -> enable_if_t< is_same_type_v< remove_unsigned<T>, remove_unsigned<U> >, T >*
{ return reinterpret_cast<T*>(ptr); }

然后

inFile.read(treat_as<char>(&buffer[0]), sizeoffile); 

如果有一天 vector 类型更改为 unsigned wchar_t,此调用将失败,而 reinterpret_cast 将默默地开始做错误的事情。

关于c++ - 什么类型的转换适合从 unsigned char* 转换为 char*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62474163/

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