2011-12-21 1 views
0

Итак ... Я хочу создать простой прототип HTTP Chunked transfer encoding. У меня есть сообщения как std :: strings. И мой API-интерфейс сервера основан на строках ... поэтому мне интересно, как превратить std :: string length в hex и обратно в строку?Как превратить std :: string length в hex и обратно в строку?

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

+3

Вы не знаете, чтобы преобразовать целое число в шестнадцатеричном? Тогда как вы можете думать, что можете работать с HTTP или любым сетевым протоколом? – Nawaz

+0

@ Наваз: путем обучения, шаг за шагом. –

+0

@MikeSeymour: Это определенно путь. Но это не похоже на сообщение OP, или вы не понимали, что я имел в виду в своем предыдущем комментарии. Я имею в виду, что если я скажу, что хочу проектировать и писать свою собственную ОС, когда я ничего не знаю о программировании? – Nawaz

ответ

4
#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
std::stringstream buffer; 
buffer << std::hex << your_number; 

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

buffer << std::hex << showbase << your_number; 
1
#include <sstream> 
#include <iomanip> 

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

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

here Продемонстрировано.

1

Stringstreams являются одним из способов:

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

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

1

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

std::string convert_length_to_hex(const std::string& str) 
{ 
    std::ostringstream result; 
    result << std::hex << str.length(); 
    return result.str(); 
} 
Смежные вопросы