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

十六进制转字符串遇System.FormatException:问题原因及解决方法

问题原因

你的代码仅替换了字符串中的0x前缀,但未处理原字符串里的空格分隔符。处理后的字符串会变成类似"53 50 31 32..."的形式,包含空格字符。循环中每次截取2个字符时,会出现" 5"这类包含空格的片段,而Convert.ToInt32无法将空格识别为十六进制有效数字,因此抛出FormatException。

解决办法

提供两种可行的修复方案:

方案一:移除所有空格后处理

直接在预处理阶段移除所有空格,确保字符串是连续的十六进制字符:

hex = hex.Replace("0x", "").Replace(" ", ""); // 同时移除0x和空格
hex = hex.Trim();

StringBuilder stringBuilder = new StringBuilder();

for (int i = 0; i < hex.Length; i += 2)
{ 
    string hs = hex.Substring(i, 2);
    stringBuilder.Append(Convert.ToChar(Convert.ToInt32(hs,16)));            
}

方案二:按空格分割后逐个处理

先将原字符串按空格拆分为独立的十六进制片段,再逐个处理(更鲁棒,支持多连续空格场景):

// 按空格分割并过滤空项
var hexSegments = hex.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries);
StringBuilder stringBuilder = new StringBuilder();

foreach (var segment in hexSegments)
{
    // 移除每个片段的0x前缀
    var cleanSegment = segment.Replace("0x", "");
    stringBuilder.Append(Convert.ToChar(Convert.ToInt32(cleanSegment, 16)));
}
验证结果

原十六进制数据0x53 0x50 0x31 0x32 0x33 0x34 0x35 0x36对应的字符串结果为SP123456,两种方案均可正确输出该结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:16:11