良好的十六进制输出
经常遇到需要输出字节的16进制字符串到日志或屏幕,经常能见到下面这样的代码:
Dim buf(1024) As Byte Dim i As Long Dim s As String '-------------------- For i = LBound(buf) To UBound(buf) If Len(Hex(buf(i))) = 1 Then s = s & "0" & Hex(buf(i)) Else s = s & Hex(buf(i)) End If Next i '-------------------- For i = LBound(buf) To UBound(buf) s = s & Right("0" + Hex(buf(i)), 2) Next i
各种奇葩的写法都有,我曾经还见过用 mod 判断长度奇偶的.
因为从0~15分别是0~F,用一位十六进制字符表示,而大于15的字节值十六进制都是两位字符.所以为了输出的十六进制整体划一,需要都用双字符标识,不够的在前面加"0".
那么问题就来了,下面这样写多好:
For i = LBound(buf) To UBound(buf) If buf(i) > 15 Then s = s & Hex(buf(i)) Else s = s & "0" & Hex(buf(i)) End If Next i
我从第一次输出16进制就是这样写的,不明白有什么难的... ...