Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将字符串转换为常量字符*(使用二进制数据)_C++_Binary - Fatal编程技术网

C++ 将字符串转换为常量字符*(使用二进制数据)

C++ 将字符串转换为常量字符*(使用二进制数据),c++,binary,C++,Binary,我要做的是将字符串转换为const char* 理想情况下,我可以使用“const char*myConstChar=myString.c_str()”,但正如下面的示例所示;它对二进制数据不起作用: #include <iostream> #include <fstream> #include <stdio.h> #include <string.h> using namespace std; int main(){ string m

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

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

#include <iostream>
#include <fstream>
#include <stdio.h>
#include <string.h>

using namespace std;

int main(){
    string myString;  // This need to be string
    ifstream infile;
const char* myConstChar;  // This need to be const char*

infile.open("binary.bin");

if(infile){
        while(getline(infile, myString)){ 
        std::cout << "Data: " << myString << " string length: "; 
            std::cout << myString.length() << "\n";
            myConstChar = myString.c_str();
            std::cout << "const char Data: " << myConstChar; 
            std::cout << " const char length: "<< strlen(myConstChar) <<"\n";
        }
    }

    infile.close();
    return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
string myString;//这必须是string
河流充填;
const char*myConstChar;//这必须是const char*
infile.open(“binary.bin”);
如果(填充){
while(getline(infle,myString)){

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


任意二进制数据不应被视为字符串是有争议的。因此,请改用
std::vector
,并且不要使用类似于
strlen
的函数。这几乎可以肯定,因为二进制数据包含零值字节。这与空终止符相同,类似于
strlen
的函数用于确定在一根绳子的末端挖矿


任意二进制数据不应被视为字符串是有争议的。因此,请改用
std::vector
,并且不要使用类似
strlen

的函数。为什么要使用字符串读取二进制数据?我建议您切换到
std::vector
。这是一个怎样的问题?o.您为什么要使用字符串读取二进制数据?我建议您可以切换到
std::vector
。这是一个怎样的问题?o.OOr,只需将它保存在std::字符串中,并将c_str()与length()组合使用即可要访问内容!好的,示例中有几个零值字节:hextdump-C./binary.bin 00000000 03 01 6a 00 07 56 52 03 30 00 01 01。那么是否可以将其转换为const char*呢?std::vector的问题是,最终我希望将数据转换为可读内容。我使用的自定义库只接受const char*作为参数。因此,我最终需要将vector转换为const char*。“我想将数据转换为可读内容”。二进制数据和字符串之间不可能进行转换。使用二进制所能做的就是以十六进制格式或类似的格式打印它们。@user1432032:是的;您的代码已经获得了有效的
const char*
。问题是您不能将其视为字符串,因为它不是字符串。或者,只需将其保存在std::string中,然后将c_str()与length()结合使用要访问内容!好的,示例中有几个零值字节:hextdump-C./binary.bin 00000000 03 01 6a 00 07 56 52 03 30 00 01 01。那么是否可以将其转换为const char*呢?std::vector的问题是,最终我希望将数据转换为可读内容。我使用的自定义库只接受const char*作为参数。因此,我最终需要将vector转换为const char*。“我想将数据转换为可读内容”。二进制数据和字符串之间不可能进行转换。使用二进制所能做的就是以十六进制格式或类似的格式打印它们。@user1432032:是的;您的代码已经获得了有效的
常量char*
。问题是您不能将其视为字符串,因为它不是字符串。