我正在尝试解析用户输入的十六进制字符串,以便我可以将正确格式化的版本发送到磁盘。
在这种情况下,“正确”格式看起来像A1 F5 E1 C9
- 用大写十六进制字母分隔的空格。但是,用户输入可能没有空格(A1F5E1C9
),可能有换行符(A1 F5\nE1 C9
),可能有前导或尾随空格(\nA1 F5 E1 C9\n\n\n
),并且可能有空格而不是空格(A1-F5-E1-C9
)。它也可能包含这些变体的任意组合。这将使用的一些数字是公钥,这可能很长。
如何处理重新格式化?到目前为止,我能够提出的两个半解决方案是
BigInteger.Parse(value.Trim()
.Replace(" ", "")
.Replace(@"\n", "")
.Replace(@"\r", ""),
NumberStyles.HexNumber).ToString("X2");
仍然不会产生间隔开的字符串,或
string.Join(" ", Regex.Matches(a, @"([0-9A-Fa-f]{2})")
.Cast<Match>()
.Select(x => x.Captures[0].Value.ToUpper()))
哪个确实有效,但感觉它有很多额外的开销(Regex,LINQ)。
第二种方法实际上是最好的方法吗?我有什么明显的东西可以忽略吗?
答案 0 :(得分:0)
我不知道你的情况下十六进制字符串有多长,但你可以将你的字符串(在用不需要的字符清除之后)转换为字节数组,并使用BitConverter类将其转换为正确的字符串。 例如描述了这里: How do you convert Byte Array to Hexadecimal String, and vice versa?
此处描述了BitConverter类:https://msdn.microsoft.com/en-us/library/system.bitconverter(v=vs.110).aspx