You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

C++/CLI 十六进制字符串转字节数组解决方案

你遇到的问题是因为System::Text::Encoding::UTF8->GetBytes()的作用是将字符串的每个字符编码为对应的字节(比如字符'0'会被转成十进制48),而非解析十六进制字符串的实际数值。要实现十六进制字符串到字节数组的转换,需要逐组解析每两个十六进制字符,将其转换为对应的字节值。

以下是直接可用的C++/CLI实现代码:

array<System::Byte>^ HexStringToByteArray(System::String^ hexStr)
{
    // 校验输入字符串长度必须为偶数,否则无法完整分组转换
    if (hexStr->Length % 2 != 0)
    {
        throw gcnew System::ArgumentException("十六进制字符串长度必须为偶数");
    }

    // 初始化目标字节数组,长度为原字符串的一半
    array<System::Byte>^ byteArray = gcnew array<System::Byte>(hexStr->Length / 2);

    for (int i = 0; i < hexStr->Length; i += 2)
    {
        // 截取每两个字符作为一组十六进制值
        System::String^ hexPair = hexStr->Substring(i, 2);
        // 将十六进制字符串转换为单个字节,基数指定为16
        byteArray[i / 2] = System::Convert::ToByte(hexPair, 16);
    }

    return byteArray;
}

使用示例

当输入字符串为"09153a"时,调用该函数会返回字节数组{0x09, 0x15, 0x3a},完全符合你的需求。

额外说明

  • 该方法兼容大小写的十六进制字符(如"3A"和"3a"均可正常转换)
  • 如果输入字符串包含非十六进制字符,System::Convert::ToByte会抛出FormatException,你可以根据业务需求添加对应的异常捕获和处理逻辑

内容的提问来源于stack exchange,提问作者Nate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:15:46