如何在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
相关产品推荐
相关产品推荐

