如何在 C++ 中将十六进制字符串转换为字节字符串? [复制]
Posted
技术标签:
【中文标题】如何在 C++ 中将十六进制字符串转换为字节字符串? [复制]【英文标题】:How to convert hex string into byte string in C++? [duplicate] 【发布时间】:2019-10-01 15:36:57 【问题描述】:我正在寻找在 C++ 中将十六进制字符串转换为字节字符串的方法。
我想像下面的伪代码一样将 s1 转换为 s2。 to_byte_string
的输出必须是std::string
。
std::string s1 = "0xb5c8d7 ...";
std::string s2;
s2 = to_byte_string(s1) /* s2 == "\xb5\xc8\xd7 ..." */
有没有库函数可以做这种事情?
【问题讨论】:
基本上是this的骗子。您可以使用s2
代替答案使用的数组/向量。
【参考方案1】:
没有这样一个标准的函数来完成这个任务。但是自己写一个合适的方法并不难。
例如,您可以使用普通循环或标准算法,例如 std::accumulate。
这是一个演示程序
#include <iostream>
#include <string>
#include <iterator>
#include <numeric>
#include <cctype>
int main()
std::string s1( "0xb5c8d7" );
int i = 1;
auto s2 = std::accumulate( std::next( std::begin( s1 ), 2 ),
std::end( s1 ),
std::string(),
[&i]( auto &acc, auto byte )
byte = std::toupper( ( unsigned char )byte );
if ( '0' <= byte && byte <= '9' ) byte -= '0';
else byte -= 'A' - 10;
if ( i ^= 1 ) acc.back() |= byte;
else acc += byte << 4;
return acc;
);
return 0;
【讨论】:
以上是关于如何在 C++ 中将十六进制字符串转换为字节字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章