Как превратить длину std :: string в шестнадцатеричное, а затем обратно в строку? - PullRequest
0 голосов
/ 21 декабря 2011

Итак ... Я хочу создать простой HTTP Chunked Transfer Encoding прототип. У меня есть сообщения в виде std :: strings. И мой серверный API полностью основан на строках ... так что мне интересно, как превратить std :: string length в hex и затем обратно в string?

Скажем, у нас было std::string("This is the data in the first chunk\r\n").length(), которое вернулось бы, скажем, int 37. Я хочу преобразовать его в гекс 0x25, а затем выбраться из этого гекса std::string("25"). Как это сделать (используя stl и boost)?

Ответы [ 6 ]

4 голосов
/ 21 декабря 2011
#include <sstream>
#include <iomanip>
#include <iostream>

int main() {
    // To string:

    std::ostringstream oss;
    oss << std::hex << 37;
    std::string result = oss.str();

    std::cout << result << '\n';

    // Back from string (if you need it):

    std::istringstream iss(result);
    int original;
    if (!(iss >> std::hex >> original)) {
        // handle error here
    } else {
        std::cout << original << '\n';
    }
}
2 голосов
/ 21 декабря 2011
std::stringstream buffer;
buffer << std::hex << your_number;

buffer.str() теперь даст вам шестнадцатеричное представление вашего номера; Если вы хотите 0x перед номером, используйте это:

buffer << std::hex << showbase << your_number;
1 голос
/ 18 сентября 2018

Вот мой пример преобразования dec в hex и затем обратно

#include <iostream>
#include <sstream>
#include <string>
#include <algorithm>   

std::string dec2hex(int dec){
    std::string result;    
    std::stringstream ss;
    ss << std::hex << dec;
    ss >> result;
    std::transform(result.begin(), result.end(), result.begin(), ::toupper);
    return result;}

int hex2dec(std::string& hex){
    int x;
    std::stringstream ss;
    ss << std::hex << hex;
    ss >> x;
    return x;
}

int main()
{
    std::string hex = "ABCD";
    int dec = hex2dec(hex);
    std::cout << dec << std::endl;
    std::cout << dec2hex(dec) << std::endl;
    return 0;
}
1 голос
/ 21 декабря 2011

Это было бы решением:

std::string convert_length_to_hex(const std::string& str)
{
    std::ostringstream result;
    result << std::hex << str.length();
    return result.str();
}
1 голос
/ 21 декабря 2011

Строковые потоки являются односторонними:

std::ostringstream ss;
ss << "0x" << std::hex << 12345;
std::string aString = ss.str();

Альтернативой является всемогущий boost::format.

1 голос
/ 21 декабря 2011
#include <sstream>
#include <iomanip>

std::ostringstream str;
str << "0x" << std::hex << length;

std::string result = str.str();

Показано здесь .

...