Автор вопроса: @CyRax PTR | Web-сайт:basicproduction.nm.ru/ | ICQ: 204447456
Понадобилось тут перевести из BIN в DEC, но в VB не нашёл подходящей функции.
Эта ф-я переводит неограниченное BIN в HEX (тоже неограниченное) или DEC (ограниченное длиной Long).
Использует мою старую функцию ToDEC из конвертера систем счислений.
Если кто захочет модернизировать - не стесняйтесь.
Function Tools_Bin2HexDec(ByVal Value As String, Optional ByVal ToDec As Boolean) As String
On Error GoTo Ntb
Value = UCase$(Trim$(Value))
If Left$(Value, 2) = "&B" Then
Value = LTrim$(Right$(Value, Len(Value) - 2))
Else
Tools_Bin2HexDec = "": Exit Function
End If
If Len(Value) < 4 Then Value = String$(4 - Len(Value), "0") & Value
Dim CorrectLen As Integer
CorrectLen = Len(Value) Mod 4
If CorrectLen > 0 Then Value = String$(4 - CorrectLen, "0") & Value
Dim RetHex As String, RetHexByte As String, EnumBinBytes As Byte
For EnumBinBytes = 1 To Len(Value) Step 4
RetHexByte = Hex$(TOOLS_ToDEC_Byte(2, Mid$(Value, EnumBinBytes, 4)))
'If Len(RetHexByte) < 2 Then RetHexByte = "0" & RetHexByte
RetHex = RetHex & RetHexByte
Next EnumBinBytes
If ToDec Then
Tools_Bin2HexDec = LTrim$(Str$(Val("&H" & RetHex)))
Else
Tools_Bin2HexDec = "&H" & RetHex
End If
Exit Function
Ntb:
MsgBox "Number too big: " & Value, , Error$(Err)
Tools_Bin2HexDec = ""
Exit Function
End Function
Function TOOLS_ToDEC_Byte(NumSystem As Integer, Number$) As Byte
' Convert from any number system to decimal
Number$ = UCase$(Number$)
Dim DecNum As Long
DecNum = 0
Dim Convert As Integer
For Convert = 1 To Len(Number$)
Dim SysNum$
SysNum$ = Mid$(Number$, Convert, 1)
If Asc(SysNum$) > 64 Then SysNum$ = LTrim$(Str$((Asc(SysNum$) - 65) + 10))
DecNum = DecNum + Val(SysNum$)
If Convert = Len(Number$) Then Exit For
DecNum = DecNum * NumSystem
Next Convert
TOOLS_ToDEC_Byte = DecNum
End Function