如何在C ++中将十六进制字符串转换为字节字符串? [复制]

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

此问题已经在这里有了答案:

我正在搜索在C ++中将十六进制字符串转换为字节字符串的方法。我想像下面的伪代码一样将s1转换为s2。 to_byte_string的输出必须为std::string

std::string s1 = "0xb5c8d7 ...";
std::string s2;

s2 = to_byte_string(s1) /* s2 == "\xb5\xc8\xd7 ..." */

是否有任何库函数来执行这种操作?

c++ string hex
1个回答
0
投票

没有执行任务的标准函数。但是自己编写合适的方法并不难。

例如,您可以使用普通循环或标准算法,例如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;
}
© www.soinside.com 2019 - 2024. All rights reserved.