0

私がしたいのは、文字列を 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;
}

これは、「文字列の長さ: 13」と「const char の長さ: 3」を返します。

文字列をconst char*使用してmyString.c_str()!に変換すると、データが失われるようです。

バイナリ データを失うことなく文字列を const char* に変換するにはどうすればよいですか?!

4

1 に答える 1

4

これは、バイナリ データにゼロ値のバイトが含まれているためです。これらは、ヌル ターミネータと同じstrlenで、文字列の末尾を決定するために使用されます。

任意のバイナリ データを文字列として扱うべきではないことは議論の余地があります。代わりに を使用std::vector<char>し、 のような関数は使用しないでくださいstrlen

于 2012-06-17T19:28:09.633 に答える