C++十六进制字符流转二进制

博客介绍了类似Python中bytes.fromhex()的功能,即从十六进制字符流读取二进制数据,还举例说明了tcpdump下来的数据复制后的十六进制流,并给出了相关参考链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类似Python中的 bytes.fromhex(), 从十六进制字符流读取二进制数据

比如,tcpdump下来的data, 我们copy后的hex stream, 如:

b081fd20858480b081fd5f988580b1818c…

// ------------------------------------------------------------------
/*!
    Required headers
*/
#include <string>
#include <sstream>
#include <iomanip>

// ------------------------------------------------------------------
/*!
    Convert a block of data to a hex string
*/
void toHex( void* const  data,       //!< Data to convert
            const size_t dataLength, //!< Length of the data to convert
            std::string& dest        //!< Destination string
)
{
    unsigned char*    byteData = reinterpret_cast<unsigned char*>( data );
    std::stringstream hexStringStream;

    hexStringStream << std::hex << std::setfill( '0' );
    for( size_t index = 0; index < dataLength; ++index )
        hexStringStream << std::setw( 2 ) << static_cast<int>( byteData[index] );
    dest = hexStringStream.str();
}

/*!
    Convert a hex string to a block of data
*/
void fromHex( const std::string& in,   //!< Input hex string
              void* const        data, //!< Data store
              size_t&            len   //!< data length
)
{
    size_t         length = in.length();
    unsigned char* byteData = reinterpret_cast<unsigned char*>( data );

    std::stringstream hexStringStream;
    hexStringStream >> std::hex;
    size_t dataIndex = 0;
    for( size_t strIndex = 0; strIndex < length; ++dataIndex )
    {
        // Read out and convert the string two characters at a time
        const char tmpStr[3] = {in[strIndex++], in[strIndex++], 0};
        // Reset and fill the string stream
        hexStringStream.clear();
        hexStringStream.str( tmpStr );

        // Do the conversion
        int tmpValue = 0;
        hexStringStream >> tmpValue;
        byteData[dataIndex] = static_cast<unsigned char>( tmpValue );
    }
    len = dataIndex;
}

https://tweex.net/post/c-anything-tofrom-a-hex-string/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值