将 string 转换为 const char* (带有二进制数据)

use*_*032 0 c++ binary

我想要做的是将字符串转换为 const char*。

\n\n

理想情况下,我可以只使用“const char* myConstChar = myString.c_str()”,但如下面的示例所示;它不适用于二进制数据:

\n\n
#include <iostream>\n#include <fstream>\n#include <stdio.h>\n#include <string.h>\n\nusing namespace std;\n\nint main(){\n    string myString;  // This need to be string\n    ifstream infile;\nconst char* myConstChar;  // This need to be const char*\n\ninfile.open("binary.bin");\n\nif(infile){\n        while(getline(infile, myString)){ \n        std::cout << "Data: " << myString << " string length: "; \n            std::cout << myString.length() << "\\n";\n            myConstChar = myString.c_str();\n            std::cout << "const char Data: " << myConstChar; \n            std::cout << " const char length: "<< strlen(myConstChar) <<"\\n";\n        }\n    }\n\n    infile.close();\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这将返回“字符串长度:13”和“const char 长度:3”。

\n\n

const char*显然,将字符串转换为使用时会丢失一些数据myString.c_str()

\n\n

如何将字符串转换为 const char* 而不丢失二进制数据?!

\n

Oli*_*rth 5

这几乎可以肯定是因为您的二进制数据包含零值字节。它们与空终止符相同,其功能类似于strlen用于确定字符串的结尾。

任意二进制数据不应该被视为字符串是有争议的。因此请使用std::vector<char>,并且不要使用诸如strlen.