Binärdaten interpretieren


  • Mod

    std::vector<unsigned char> bytes(std::istream_iterator<char>(std::ifstream("my_binary_file", std::ios::binary).seekg(0)), std::istream_iterator<char>());
    //                                                                                                             ^ pseudo-lvalue-cast
    


  • camper schrieb:

    std::vector<unsigned char> bytes(std::istream_iterator<char>(std::ifstream("my_binary_file", std::ios::binary).seekg(0)), std::istream_iterator<char>());
    

    camper ist ja so ein king...

    Aber ich kann das auch (zweizeiler):

    std::string str = dynamic_cast<std::ostringstream*>(&(std::ostringstream() << std::ifstream("my_binary_file", std::ios::binary).rdbuf()))->str() ;
        std::vector<unsigned char> bytes( str.begin(), str.end() );
    


  • Sone schrieb:

    std::string str = dynamic_cast<std::ostringstream*>(&(std::ostringstream() << std::ifstream("my_binary_file", std::ios::binary).rdbuf()))->str() ;
        std::vector<unsigned char> bytes( str.begin(), str.end() );
    

    😕

    Und warum muss es vorher unbedingt in einen String, wenn man doch vom Stream direkt in den Vector lesen könnte?



  • ipsec schrieb:

    Sone schrieb:

    std::string str = dynamic_cast<std::ostringstream*>(&(std::ostringstream() << std::ifstream("my_binary_file", std::ios::binary).rdbuf()))->str() ;
        std::vector<unsigned char> bytes( str.begin(), str.end() );
    

    😕

    Und warum muss es vorher unbedingt in einen String, wenn man doch vom Stream direkt in den Vector lesen könnte?

    Wie meinste das?



  • Sone schrieb:

    Und warum muss es vorher unbedingt in einen String, wenn man doch vom Stream direkt in den Vector lesen könnte?

    Wie meinste das?

    So wie ers geschrieben hat. Wozu den std::string str?



  • pumuckl schrieb:

    Sone schrieb:

    ipsec schrieb:

    Und warum muss es vorher unbedingt in einen String, wenn man doch vom Stream direkt in den Vector lesen könnte?

    Wie meinste das?

    So wie ers geschrieben hat. Wozu den std::string str?

    Ich kann doch wohl kaum

    std::vector v( dynamic_cast<std::ostringstream*>(&(std::ostringstream() << std::ifstream("my_binary_file", std::ios::binary).rdbuf()))->str() );
    

    Schreiben. Die start-end iteratorenpaar Version funktioniert hier dank prvalue auch nicht. Also wie ohne Puffer?



  • Es gibt wohl einen quote-bug.

    Edit: Pumuckl hat falsch gequotet.



  • Sone schrieb:

    Ich kann doch wohl kaum

    std::vector v( dynamic_cast<std::ostringstream*>(&(std::ostringstream() << std::ifstream("my_binary_file", std::ios::binary).rdbuf()))->str() );
    

    Schreiben. Die start-end iteratorenpaar Version funktioniert hier dank prvalue auch nicht. Also wie ohne Puffer?

    Mit istream_iterator , wie camper es bereits geschrieben hat.



  • ipsec schrieb:

    Sone schrieb:

    Ich kann doch wohl kaum

    std::vector v( dynamic_cast<std::ostringstream*>(&(std::ostringstream() << std::ifstream("my_binary_file", std::ios::binary).rdbuf()))->str() );
    

    Schreiben. Die start-end iteratorenpaar Version funktioniert hier dank prvalue auch nicht. Also wie ohne Puffer?

    Mit istream_iterator , wie camper es bereits geschrieben hat.

    -.-

    Ich meinte, meine Version. Campers ist die mit Streamiteratoren. Ich meinte meine mit dem Stringstream. Klar, dass die nicht so gut ist wie campers, ich wollte sehen ob ich nen zwei/ein-zeiler hinbekomme 😉


  • Mod

    Sone schrieb:

    Die start-end iteratorenpaar Version funktioniert hier dank prvalue auch nicht.

    lambda

    auto v = [](std::ostringstream&& s){ return s << std::ifstream("my_binary_file", std::ios::binary).rdbuf(), [](std::string s){ return std::vector<unsigned char>(begin(s), end(s)); }(s.str()); }(std::ostringstream());
    

Anmelden zum Antworten