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

如何在C++ Builder中将Unicode十六进制字符串转换为ASCII等效字符串

在C++ Builder中实现十六进制字符串转ASCII字符串

问题分析

你需要把十六进制格式的Unicode字符串(如353135313531353135313531)转换为对应的ASCII解析结果(如515151515151),本质是将每两位十六进制字符转换为对应的ASCII字符。

原代码的核心问题是:hex_char.ToInt()会把字符串以十进制规则解析为整数,而你需要的是十六进制解析。比如"35"作为十六进制是0x35,对应ASCII字符'5',但十进制解析会得到35,对应ASCII的#,这完全不符合需求。

正确实现代码

以下是修正后的C++ Builder代码:

String hex_to_ascii(const String& hex_str) {
    String ascii_str;
    // 确保输入长度为偶数,避免越界
    if (hex_str.Length() % 2 != 0) {
        return ascii_str;
    }
    for (int i = 1; i <= hex_str.Length(); i += 2) {
        // 截取两位十六进制字符
        String hex_char = hex_str.SubString(i, 2);
        // 以十六进制规则转换为整数
        int ascii_code = StrToInt("0x" + hex_char);
        // 将ASCII码转为字符并追加到结果
        ascii_str += static_cast<wchar_t>(ascii_code);
    }
    return ascii_str;
}

也可以用sscanf实现十六进制解析:

String hex_to_ascii(const String& hex_str) {
    String ascii_str;
    if (hex_str.Length() % 2 != 0) {
        return ascii_str;
    }
    for (int i = 1; i <= hex_str.Length(); i += 2) {
        String hex_char = hex_str.SubString(i, 2);
        int ascii_code;
        sscanf(hex_char.c_str(), "%x", &ascii_code);
        ascii_str += static_cast<wchar_t>(ascii_code);
    }
    return ascii_str;
}

关于ToHex方法的说明

C++ Builder中的ToHex方法是将字节数据转换为十六进制字符串,和你的需求(十六进制转ASCII)是反向操作。比如它可以把字符'5'转为字符串"35",但无法直接完成你需要的反向转换。你可以在C++ Builder的本地帮助文档中搜索ToHex查看详细说明,它通常属于TBytes或相关字符串类的成员方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:26:02