fwrite 从字符串中写入二进制数据

Mil*_*low 1 c++ fwrite

我想创建一个文件并将“A”写入其中(ascii 为 65 == 01000001)。奇怪的是,无论 的值是多少std::string binary,其中总是写有字母myfile.txtP。

    std::string binary = "01000001";
    std::string file = "myfile.txt";
    FILE* f;
    f = fopen(file.c_str(), "wb");      
    fwrite(&binary, 1, 1, f);     
    fclose(f);
Run Code Online (Sandbox Code Playgroud)

执行此代码后,我使用命令读取二进制数据xxd -b myfile,得到以下结果:

00000000:01010000

您发现这段代码有问题吗?

Som*_*ken 6

fwrite(&binary, 1, 1, f);
Run Code Online (Sandbox Code Playgroud)

std::string您传递了to的指针 fwrite,这很糟糕。

您将需要通过调用以下命令来获取指向字符串内部缓冲区的指针c_str()

fwrite(binary.c_str(), 1, 1, f);  
Run Code Online (Sandbox Code Playgroud)

这是不使用 C 文件句柄的另一个原因,fwrite的第一个参数是 a const void*,这就是编译器一开始没有给你错误的原因。