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

问题描述 投票:0回答:6

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

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

c++ string boost stl hex
6个回答
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();
}

1
投票

这是我的十六进制转换然后返回的例子

#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;
}
© www.soinside.com 2019 - 2024. All rights reserved.