У меня возникла проблема с кодом при попытке преобразовать string
в uint8_t*
. Обратите внимание, что я новичок в C ++, я стараюсь изо всех сил, чтобы понять это.
Мой метод получает строку:
8D7152D03D05942E403EB59DC2923B3F, E5DE428B05C0CE081E20E870712D7BE8,127
Который затем разделяется на разделитель ','
. Затем я вызываю функцию для преобразования string
s в uint8_t*
.
Каким-то образом моя переменная key_
получает правильное значение, но впоследствии значение изменяется.
struct Key{
uint8_t *key_;
uint8_t *iv_;
uint32_t creation_timestamp;
...
void from_String(string text){
printf("Text to convert = %s\n", text.c_str());
stringstream ss(text);
string item;
vector<string> splittedStrings;
while(getline(ss,item,',')){
splittedStrings.push_back(item);
}
if(splittedStrings.size() == 3){
convert(splittedStrings[0],0);
printf("Key: %s\n", key_);
convert(splittedStrings[1],1);
convert(splittedStrings[2],2);
}else{
printf("Error ! Trying to reconstruct message with invalid data!\n");
}
}
...
void convert(string toConvert, int i){
char* endptr = NULL;
if (i == 0){
key_ = (uint8_t*) reinterpret_cast<const uint8_t*>(&toConvert[0]);
}else if (i == 1){
printf("Key2: %s\n", key_);
iv_ = (uint8_t*) reinterpret_cast<const uint8_t*>(&toConvert[0]);
}else if (i == 2){
creation_timestamp = strtol(toConvert.c_str(), &endptr, 10);
handleErrors(endptr, toConvert, creation_timestamp);
}else {
printf("Error. Operator is not correct!\n");
}
}
};
Посмотрите, как printf
s показывают значение key_
. Выход программы:
Текст обращенного = 8D7152D03D05942E403EB59DC2923B3F, E5DE428B05C0CE081E20E870712D7BE4,40653
1026 * Key: 8D7152D03D05942E403EB59DC2923B3F
1028 * Key2: E5DE428B05C0CE081E20E870712D7BE4
1030
Это из-за неожиданного поведения reinterpret_cast
? Я уже пробовал некоторые другие способы преобразования string
в uint8_t*
, но результат был тот же. Я пытался использовать switch
вместо if else
условий, но результат был таким же.