在C++中,将字符串转换为十六进制以及将十六进制转换为字符串的最佳方法是什么?
例如:
- 将类似于
"Hello World"
的字符串转换为十六进制格式:48656C6C6F20576F726C64
- 并将十六进制
48656C6C6F20576F726C64
转换为字符串:"Hello World"
在C++中,将字符串转换为十六进制以及将十六进制转换为字符串的最佳方法是什么?
例如:
"Hello World"
的字符串转换为十六进制格式:48656C6C6F20576F726C64
48656C6C6F20576F726C64
转换为字符串:"Hello World"
#include "boost/algorithm/hex.hpp"
std::string hexed = boost::algorithm::hex(std::string("input"));
https://www.boost.org/doc/libs/1_78_0/boost/algorithm/hex.hpp
#include <iostream>
#include<sstream>
using namespace std;
int hexCharToInt(char);
string hexToString(string);
int main()
{
std::string str;
std::stringstream str1;
str="Hello World";
for(int i=0;i<str.length();i++){
str1 << std::hex << (int)str.at(i);
}
std::cout << str1.str() <<"\n";
string test = "48656c6c6f20576f726c64";
std::cout << hexToString(test) <<"\n";
return 0;
}
string hexToString(string str){
std::stringstream HexString;
for(int i=0;i<str.length();i++){
char a = str.at(i++);
char b = str.at(i);
int x = hexCharToInt(a);
int y = hexCharToInt(b);
HexString << (char)((16*x)+y);
}
return HexString.str();
}
int hexCharToInt(char a){
if(a>='0' && a<='9')
return(a-48);
else if(a>='A' && a<='Z')
return(a-55);
else
return(a-87);
}
这适用于打印UTF-8编码的字符串(长度可变)
// std::string
void printHex1(const std::string & str)
{
printf("%s 1: ", str.c_str());
for (size_t i = 0; i < str.size(); i++)
printf("%X ", str[i]);
printf("\n");
}
// c-style string
void printHex2(const char * buf)
{
printf("%s 2: ", buf);
size_t i = 0;
while (buf[i] != 0) {
printf("%X ", buf[i]);
i++;
}
printf("\n");
}
小测试
std::string test_vector = "Cigueña";
char c_vector[128];
strncpy(c_vector, test_vector.c_str(), 128);
printHex1(test_vector);
printHex2(c_vector);
输出:
Cigueña 1: 43 69 67 75 65 FFFFFFC3 FFFFFFB1 61
Cigueña 2: 43 69 67 75 65 FFFFFFC3 FFFFFFB1 61
了解如何使用更多的字节编码 UTF-8 字符 ñ
。
为什么没有人使用sprintf函数?
#include <string>
#include <stdio.h>
static const std::string str = "hello world!";
int main()
{
//copy the data from the string to a char array
char *strarr = new char[str.size()+1];
strarr[str.size()+1] = 0; //set the null terminator
memcpy(strarr, str.c_str(),str.size()); //memory copy to the char array
printf(strarr);
printf("\n\nHEX: ");
//now print the data
for(int i = 0; i < str.size()+1; i++)
{
char x = strarr[i];
sprintf("%x ", reinterpret_cast<const char*>(x));
}
//DO NOT FORGET TO DELETE
delete(strarr);
return 0;
}