gpt4 book ai didi

c++ - 如何在没有 reinterpret_cast 的情况下将 unsigned char* 输出到文件

转载 作者:搜寻专家 更新时间:2023-10-31 02:22:55 25 4
gpt4 key购买 nike

我有一个 unsigned char* 填充的字符不仅仅是 ASCII 例如:`

¤ÝkGòd–ùë$}ôKÿUãšj@Äö5ÕnE„_–Ċ畧-ö—RS^HÌVÄ¥U`  . 

如果我reinterpret_cast,如果我没记错的话我会丢失字符,因为它们不全是 ASCII。我到处搜索,但所有解决方案都需要某种会改变数据的转换或转换。这是我所拥有的,但不起作用。

unsigned char* cipherText = cipher->encrypt(stringTest);
string cipherString(reinterpret_cast<char*>(cipherText)); //<-- At this point data changes in debugger
outputfile.open(outfile);
outputfile.close();

最佳答案

您没有调用 string constructor你应该打电话您应该调用带有两个参数的参数,而不是采用单个 char * 参数的参数 - char * 和长度。

basic_string( const CharT* s,
size_type count,
const Allocator& alloc = Allocator() );

在你的例子中使用它

unsigned char* cipherText = cipher->encrypt(stringTest);
size_t cipherTextLength = // retrieve this however the API allows you to
string cipherString(reinterpret_cast<char*>(cipherText), cipherTextLength);

outputfile.open(outfile);
// assuming outputfile is an ofstream
outputfile << cipherString;
outputfile.close();

请注意,调试器可能仍会指示截断的字符串,具体取决于它如何解释 string 的内容。如果您在编辑器中打开输出文件并检查字节,您应该会看到预期的结果。

作为RemyLebeau在评论中提到,如果您不需要 std::string 用于任何其他目的,您甚至不需要创建它,只需写入 ofstream直接。

outputfile.open(outfile);       
outputfile.write(reinterpret_cast<char*>(cipherText), cipherTextLength);
outputfile.close();

关于c++ - 如何在没有 reinterpret_cast 的情况下将 unsigned char* 输出到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29812967/

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