C# 如何将含十六进制字母的空格分隔字符串转换为List<byte>?
根因说明
Byte.Parse方法默认采用十进制规则解析输入字符串,仅识别0-9的数字字符,当遇到A0这类包含十六进制字母的片段时,就会触发格式解析异常。要同时兼容纯数字、十六进制字母组成的字节片段,只需要在解析过程中显式指定十六进制数制规则即可。
可直接运行的修正实现
首先需要引入依赖的命名空间:
using System.Globalization;
修正后的完整代码:
List<byte> response = new List<byte>(); string dataReturned = "62 07 00 00 04 05 00 01 A0"; response = dataReturned .Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries) // 显式指定按十六进制规则解析每个片段 .Select(segment => byte.Parse(segment, NumberStyles.HexNumber, CultureInfo.InvariantCulture)) .ToList();
实现细节说明
NumberStyles.HexNumber参数会告知解析器当前字符串为十六进制格式,支持识别0-9、A-F(大小写均兼容)的字符,完全覆盖场景中的纯数字片段、带十六进制字母的片段两类内容。- 传入
CultureInfo.InvariantCulture可以消除系统区域设置对解析逻辑的干扰,避免不同地区的数字格式规则差异引发的解析异常。 - 原有的按空格拆分、自动过滤空片段的逻辑无需做任何调整。
常见边界注意事项
- 该解析模式不支持带进制前缀(如
0x、0X)的片段,如果源字符串可能包含这类前缀,需要在解析前预先做替换处理。 - 解析过程会自动校验片段的取值范围,单段值超过255(即超出byte类型的取值范围)的内容会直接抛出格式错误,符合类型边界要求。
内容的提问来源于stack exchange,提问作者k_al
相关产品推荐
相关产品推荐

