如何将std :: string长度转换为十六进制而不是返回到字符串?

时间:2011-12-21 12:27:23

标签: c++ string boost stl hex

所以...我想创建简单的HTTP Chunked transfer encoding原型。我有消息作为std :: strings。我的服务器API都是基于字符串的...所以我想知道如何将std :: string长度转换为十六进制而不是返回字符串?

所以说我们有std::string("This is the data in the first chunk\r\n").length()会返回说明37。我想将其转换为十六进制0x25,而不是从十六进制std::string("25")中退出。怎么做这样的事情(使用stl和boost)?

6 个答案:

答案 0 :(得分: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';
    }
}

答案 1 :(得分:2)

std::stringstream buffer;
buffer << std::hex << your_number;

buffer.str()现在将为您提供数字的十六进制表示;如果您希望数字前面有0x,请使用以下内容:

buffer << std::hex << showbase << your_number;

答案 2 :(得分:1)

#include <sstream>
#include <iomanip>

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

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

展示here

答案 3 :(得分:1)

Stringstreams是一种方式:

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

另一种选择是强大的boost::format

答案 4 :(得分:1)

这将是一个解决方案:

std::string convert_length_to_hex(const std::string& str)
{
    std::ostringstream result;
    result << std::hex << str.length();
    return result.str();
}

答案 5 :(得分:1)

这是我的dec转换为十六进制然后再返回的示例

#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;
}