Version mit Umwandlung CDec() u. Text
22.11.2014 14:11:55
Tino
Hallo,
so kann man auch größere Berechnen und komplett darstellen und auch zurückrechnen.
Option Explicit
Sub test()
Dim sBinar$, sStringAscii$, sDec$
Dim sText$
Const BitSystem% = 8
sStringAscii = "AIC2WVuP"
'sStringAscii = "1IC0WVuz"
'sStringAscii = "zzzzzzzzzzzz"
'sStringAscii = "Lorenz_Tino"
sBinar = AsciiToBin(sStringAscii, BitSystem)
sDec = BinarToLongDec(sBinar)
sText = DecToAscii(sDec, BitSystem)
MsgBox "Ascii: " & vbCr & sStringAscii & vbCr & vbCr & _
"Binary " & BitSystem & " Bit: " & vbCr & sBinar & vbCr & vbCr & _
"Dez: " & vbCr & sDec & vbCr & vbCr & _
"Rückwerts: " & vbCr & sText
End Sub
Function BinarToLongDec(sBinar$)
Dim i%, ii%
BinarToLongDec = "0"
For i = Len(sBinar) To 1 Step -1
If Mid(sBinar, i, 1) = "1" Then
BinarToLongDec = CDec(BinarToLongDec) + CDec(RechnerPotens(2, ii))
End If
ii = ii + 1
Next i
End Function
Function AsciiToBin(sAscii$, bitSys%)
Dim iChr%, i%, ii%, sTmp$
'Dez. in Bin
For i = 1 To Len(sAscii)
iChr = Asc(Mid(sAscii, i, 1))
Do
ii = iChr Mod 2
sTmp = ii & sTmp
iChr = iChr \ 2
Loop Until iChr = 0
AsciiToBin = AsciiToBin & Format(sTmp, String(bitSys, "0"))
sTmp = ""
Next i
End Function
Function DecToAscii(ByVal DecBin$, bitSys) As String
Dim ii$, i%, BinToDec, sTemp$
Dim sBin$, sAscii$
Dim n%
Do
ii = CDec(DecBin) / CDec(2)
If InStr(ii, ",") > 0 Then ii = Left$(ii, InStr(ii, ",") - 1)
ii = CDec(2) * CDec(ii)
ii = CDec(DecBin) - CDec(ii)
sBin = ii & sBin
DecBin = CDec(DecBin) / CDec(2)
If InStr(DecBin, ",") > 0 Then DecBin = Left$(DecBin, InStr(DecBin, ",") - 1)
Loop Until DecBin = "0"
If Len(sBin) Mod bitSys > 0 Then sBin = String(bitSys - Len(sBin) Mod bitSys, "0") & sBin
ii = 0
For i = Len(sBin) To 1 Step -1
If Mid(sBin, i, 1) = "1" Then
BinToDec = BinToDec + 2 ^ n
End If
n = n + 1
If n Mod bitSys = 0 Or i = 1 Then
DecToAscii = Chr(BinToDec) & DecToAscii
BinToDec = 0
n = 0
End If
Next i
End Function
Function RechnerPotens(n, nn) As String
Dim nnn
If nn = 0 Then RechnerPotens = "1": Exit Function
RechnerPotens = n
For nnn = 1 To nn - 1
RechnerPotens = CDec(RechnerPotens) * CDec(n)
Next nnn
End Function
Gruß Tino