+-
c – 为什么将unsigned char *转换为char *需要reinterpret_cast?
stackoverflow上有很多关于读取和写入unsigned char的帖子.这些帖子建议使用reinterpret_cast从unsigned char *转换为char *.我想知道为什么需要它,因为两种类型都有相同的大小.

我在Windows和Linux上运行代码,它工作正常(有或没有重新解释转换).我错过了什么吗?如果没有reinterpret_cast,有人可以发布一个无效的代码吗?注意,我说的是unsigned char(不是unsigned int).

#include <iostream>
#include <fstream>

std::ofstream os;
unsigned char *buff = new unsigned char[3]{ 0xe4, 0xe1, 0xd4 };
os.open("image.jpg", std::ios::out | std::ios::binary);

os.write(reinterpret_cast<char*>(buff), 3 * sizeof(unsigned char));
// or: os.write((char*)(buff), 3 * sizeof(unsigned char));
os.close();

std::ifstream file;
memset(buff, 0, 3 * sizeof(unsigned char));

file.open("image.jpg", std::ios::in | std::ios::binary);
file.read(reinterpret_cast<char*>(buff), 3 * sizeof(unsigned char));
//or: file.read((char *)buff, 3 * sizeof(unsigned char));
file.close();
最佳答案
reinterpret_cast从不“需要”;任何reinterpret_cast可以做的事情都可以通过C风格演员同样完成.

存在特殊的强制转换语法,因为需要reinterpret_cast的东西往往是危险的东西,因此可能应该注意代码中的那些点. reinterpret_cast还可以防止意外删除const,C样式的强制转换允许你这样做.

点击查看更多相关文章

转载注明原文:c – 为什么将unsigned char *转换为char *需要reinterpret_cast? - 乐贴网