所以...我想创建简单的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)?
#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';
}
}
std::stringstream buffer;
buffer << std::hex << your_number;
buffer.str()
现在将为您提供数字的十六进制表示;如果你想在数字前面加上0x
,请使用:
buffer << std::hex << showbase << your_number;
#include <sstream>
#include <iomanip>
std::ostringstream str;
str << "0x" << std::hex << length;
std::string result = str.str();
展示here。
Stringstreams是一种方式:
std::ostringstream ss;
ss << "0x" << std::hex << 12345;
std::string aString = ss.str();
另一种选择是强大的boost::format
。
这将是一个解决方案:
std::string convert_length_to_hex(const std::string& str)
{
std::ostringstream result;
result << std::hex << str.length();
return result.str();
}
这是我的十六进制转换然后返回的例子
#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;
}