Lire un fichier binaire (jpg) à une chaîne de caractères à l'aide de c++

J'ai besoin de lire un fichier jpg pour une chaîne de caractères. Je veux télécharger ce fichier sur notre serveur, je viens de trouver que l'API nécessite une chaîne de caractères, comme les données de ce pic. J'ai suivi les suggestions dans une ancienne question que j'ai posée Télécharger des images vers un serveur à l'aide de c++ .

int main() {
    ifstream fin("cloud.jpg");
    ofstream fout("test.jpg");//for testing purpose, to see if the string is a right copy
    ostringstream ostrm;

    unsigned char tmp;
    int count = 0;
    while ( fin >> tmp ) {
        ++count;//for testing purpose
        ostrm << tmp;
    }
    string data( ostrm.str() );
    cout << count << endl;//ouput 60! Definitely not the right size
    fout << string;//only 60 bytes
    return 0;
}

Pourquoi il s'arrête à 60 ans? C'est un étrange personnage à 60, et que dois-je faire pour lire les jpg d'une chaîne de caractères?

Mise à JOUR

Presque là, mais après l'utilisation de la méthode proposée, quand je la réécriture de la chaîne dans le fichier de sortie, il déformée. Savoir que je dois aussi préciser que l'ofstream est en mode binaire par ofstream::binary. Fait!

Par le moyen de ce qu'est la différence entre ifstream::binary & ios::binary, est-il une abréviation pour ofstream::binary?

Il n'y a pas de différence entre ifstream::binary et ios::binary, ni même ofstream::binary. binary est définie dans le ios_base classe, qui est la racine de toutes les classes iostream. ios est un typedef pour basic_ios<char>, qui est une classe qui se situe entre la ios_base et istream/ostream dans la hiérarchie. J'ai tendance à l'utiliser parce que c'est facile à saisir. Vous pouvez utiliser ios::binary pour les deux ifstream et ofstream. Vous pourriez même utiliser ifstream::binary pour ofstream, et vice versa.

OriginalL'auteur zoujyjs | 2013-07-11