2017-01-04 2 views
-1

Je suis en train de convertir une chaîne en un tableau uint8_t et revenir à une chaîne, mais je ne reçois pas le même résultat:C++ convertir chaîne en uint8_t tableau et retour

#include <iostream> 
#include <string> 
#include <sstream> 
#include <vector> 

using namespace std; 

string ByteArrayToString(const uint8_t *arr, int size) { 
    std::ostringstream convert; 

    for (int a = 0; a < size; a++) { 
     convert << (int)arr[a]; 
    } 

    return convert.str(); 
} 


int main(int argc, char **argv) { 
    string str = "10 1d8d532d463c9f8c205d0df7787669a85f93e260 ima-ng sha1:0000000000000000000000000000000000000000 boot_aggregate"; 

    vector<uint8_t> myVector(str.begin(), str.end()); 
    uint8_t *tmp = &myVector[0]; 

    cout << str << endl; 
    cout << ByteArrayToString(tmp, (str.length()/2)) << endl; 

    return 0; 
} 
+1

Pourquoi divisons '.length' par 2 vous? – melpomene

Répondre

3

Votre casting est à l'origine cela, retirez-le:

for (int a = 0; a < size; a++) { 
    convert << arr[a]; 
} 

à part cela, vous ne convertissez la moitié de la chaîne, (length()/2).

live example

+0

Merci, cela a fonctionné maintenant! – wasp256