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

