65.9K
CodeProject 正在变化。 阅读更多。
Home

在十六进制字符串上进行操作

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2014年10月29日

CPOL

1分钟阅读

viewsIcon

8167

在十六进制字符串上进行操作

大家好!今天我们将深入了解十六进制字符串的强大控制力,并提升您的技能。

开始吧

一个完美的十六进制字符串严格限制于字符集,该字符集由符号 {0 ... 9, a ... f, A...F} 和一个分隔符字符组成。
这是标准版本。 换句话说,这是一个理想状态。
但是,如果源十六进制字符串包含由于有故障的扫描仪或随意错误而发生的一个或多个错误怎么办?如果源字符串具有与程序中分隔符不同的分隔符字符怎么办?

问:如何从十六进制字符串中获取所有分隔符?
答:首先,让我们定义一个源字符串和一组“正确”的十六进制字符

'this is the worst hex string that I've ever wrote =)
Dim SourceHex as String = "DE;51:C6 49-3E+99=73&D4#DC@A5*1A_9B\3C<C2>7E/7C"
'but it's readable!

'and this is the set of expecting chars.
Dim GoodChars() As Char = New Char() {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
                                      "a", "b", "c", "d", "e", "f",
                                      "A", "B", "C", "D", "E", "F"}

因此,要获取所有分隔符,我们只需从源字符串中大量的 char 中排除这些正确的 char

Dim DelimChars() As Char = SourceHex.Except(GoodChars).ToArray

问:我不需要大量的分隔符。如何获取一个有用的字节数组?
答:小菜一碟!只需使用这些丑陋数量的分隔符拆分源字符串

Dim UsefulData() As String = SourceHex.Split(DelimChars)

在此步骤中,我们获得了清除任何垃圾的数据。但是,它可能仍然包含错误。例如,两个或多个字节没有分隔符(彼此跟随)。

因此,您必须检查数组中的所有项目,并尝试更正找到的错误(在“粘合”的字节之间插入分隔符)。
如果发现错误,您需要使用相同分隔符连接数组项目,然后再次使用一个分隔符拆分结果字符串(如果需要获取 Byte())。

希望这有所帮助。

© . All rights reserved.