良好的十六进制输出

经常遇到需要输出字节的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进制就是这样写的,不明白有什么难的... ...

posted @ 2016-03-26 11:33  一个码农的蹉跎岁月  阅读(489)  评论(0编辑  收藏  举报