如何在 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++ 中将十六进制字符串转换为字节字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual C++ 中将字节数组转换为十六进制字符串?

在 C++ 中将十六进制字符串转换为字节数组

如何在 C 中将字节数组转换为十六进制字符串?

如何在 Python 中将字符串转换为字节数组

在 C++ 中将十六进制字符转换为 int

在 Python 中将十六进制字符串转换为字节列表