重新格式化十六进制字符串输入

时间:2016-03-14 21:46:00

标签: c#

我正在尝试解析用户输入的十六进制字符串,以便我可以将正确格式化的版本发送到磁盘。

在这种情况下,“正确”格式看起来像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)。

第二种方法实际上是最好的方法吗?我有什么明显的东西可以忽略吗?

1 个答案:

答案 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