Преобразование строки в число в C ++ - PullRequest
0 голосов
/ 27 мая 2020

Я собираюсь преобразовать строку в массив чисел. Например, приведенный ниже код работает хорошо:

// A program to demonstrate the use of stringstream 
#include <iostream> 
#include <sstream> 
using namespace std; 

int main() 
{ 
    string s = "12345"; 

    // object from the class stringstream 
    stringstream geek(s); 

    // The object has the value 12345 and stream 
    // it to the integer x 
    int x = 0; 
    geek >> x; 

    // Now the variable x holds the value 12345 
    cout << "Value of x : " << x; 

    return 0; 
}

Как мне сделать это для очень большой строки. Например, строка s = "77980989656B0F59468581875D719A5C5D66D0A9AB0DFDDF647414FD5F33DBCBE"

Мне нужно сохранить это в массиве символов, arr [32]. arr [0] должен иметь 0x77, arr [1] должен иметь 0x98 и так далее. Учитывая, что строка s имеет размер 64 байта. мой массив будет иметь длину 32 байта.

Может ли кто-нибудь помочь с этим?

1 Ответ

0 голосов
/ 27 мая 2020

Вы можете попытаться разбить входную строку на подстроки, каждая из которых имеет длину 2 символа. Затем преобразуйте шестнадцатеричную подстроку с помощью функции std :: stoi () в целое число и сохраните каждый преобразованный результат в контейнере std :: vector:

#include <vector>
#include <iostream>


std::vector<int> convert(const std::string& hex_str) {

    std::vector<int> output;
    std::string::const_iterator last = hex_str.end();
    std::string::const_iterator itr = hex_str.cbegin();

    if (hex_str.size() % 2) {
        last--;
    }

    while(itr != last) {

        std::string sub_hex_str;
        std::copy(itr,itr+2,std::back_inserter(sub_hex_str));
        try {
            output.push_back(std::stoi(sub_hex_str,0,16));
        }catch(const std::exception& e) {
            std::cerr << sub_hex_str << " : " << e.what() << std::endl;
        }

        itr += 2;       
    }

    return output;
}

int main()
{
    std::string a = "77980989656B0F59468581875D719A5C5D66D0A9AB0DFDDF647414FD5F33DBCBE";

    const auto output = convert(a);

    for(const auto& a: output) {
        std::cout << a << std::endl;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...