2011-12-21 13 views
0

所以...我想創建簡單的HTTP Chunked transfer encoding原型。我有消息作爲std ::字符串。而我的服務器API是基於字符串的...所以我想知道如何將std :: string長度轉換爲十六進制,然後再轉換回字符串?如何將std :: string長度轉換爲十六進制並將其轉換回字符串?

所以說,我們有std::string("This is the data in the first chunk\r\n").length(),將返回說詮釋37。我想將它轉換爲十六進制0x25,並從該十六進制std::string("25")中跳出。如何做這樣的事情(使用stl和boost)?

+3

你不知道的整數轉換爲十六進制?那麼你怎麼能認爲你可以使用HTTP或任何網絡協議? – Nawaz 2011-12-21 12:29:32

+0

@Nawaz:通過學習,一次一步。 – 2011-12-21 12:33:23

+0

@MikeSeymour:這絕對是一種方式。但是,OP的帖子似乎並不如此,或者你不明白我以前的評論意味着什麼。我的意思是,如果我說我想設計和編寫我自己的操作系統,當我對編程一無所知時呢? – Nawaz 2011-12-21 12:36:22

回答

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(); 
} 
相關問題