Public Function Bin2Hex(ByVal sBin As String) As String
Dim i As Integer
Dim nDec As Long
sBin = String(4 - Len(sBin) Mod 4, "0") & sBin 'Add zero to complete Byte
For i = 1 To Len(sBin)
nDec = nDec + CInt(Mid(sBin, Len(sBin) - i + 1, 1)) * 2 ^ (i - 1)
Next i
Bin2Hex = Hex(nDec)
If Len(Bin2Hex) Mod 2 = 1 Then Bin2Hex = "0" & Bin2Hex
End Function
Option Explicit
...
Private BinDict As Collection
...
Function Bin2Hex(BinValue As String) As String
If BinDict Is Nothing Then
Set BinDict = New Collection
BinDict.Add Key:="0000", Item:="0"
BinDict.Add Key:="0001", Item:="1"
BinDict.Add Key:="0010", Item:="2"
BinDict.Add Key:="0011", Item:="3"
...
BinDict.Add Key:="1110", Item:="E"
BinDict.Add Key:="1111", Item:="F"
End If
Dim I As Long, V As String, res As String
I = Len(BinValue)
res = Space$(Fix(I/4) + I Mod 4, " ")
For I = 1 To Len(res)
V = Mid$(BinValue, Len(BinValue) - I * 4 + 1, 4)
On Error Resume Next
V = BinDict.Item(V)
If Err.Number > 0 Then V = "-"
On Error Goto 0
Mid$(res, I, 1) = V
Next I
End Function
alibek писал(а):Я бы по другому сделал.
Public Function BinToHex(ByVal sBin As String) As String
Dim i As Long, k As Long, h As Integer, ss As String
k = Len(sBin)
If k = 0 Then Exit Function
k = k Mod 4
If k Then sBin = String$(4 - k, "0") & sBin
BinToHex = String$(Len(sBin) \ 4, "0")
For k = 1 To Len(sBin) Step 4
ss = Mid$(sBin, k, 4): h = 0
For i = 1 To 4
If Mid$(ss, i, 1) = "1" Then h = h + 2 ^ (4 - i)
Next i
If h Then Mid$(BinToHex, (k + 3) \ 4, 1) = Hex$(h)
Next k
End Function
Gigahard писал(а):Круто! Спасибо! То что нужно .
Конечно не хотелось бы наглеть ... Но можно еще примерчик аналогичной функции, только с обратным преобразованием? Т.е. HexToBin...
Andrey Fedorov писал(а):А я бы еще по другому - вот сейчас набросал - см ниже.
Приведенная функция преобразует строку с двоичным представлением числа любой длины в его шестнадцатеричное представление:
alibek писал(а):Если пару строчек добавить (дополнение нулями до длины, кратной 4), то у меня тоже будет произвольная длина. Но вот скорость работы наверняка будет выше.
alibek писал(а):Мерять лень
alibek писал(а):Но коллекция создается и заполняется только один раз за все время работы программы, а поиск в коллекции по ключу работает быстро.
Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 111