pretvorba 32bitov (binarno) v hex znotraj excela

Odyssey

Pripravnik
9. okt 2007
756
3
18
Zdravo!
Soočam se z eno težavo v excellu, računam ene vrednosti in rezultat dobim v celici v binarni obliki dolžina 32 bitov.
10111111100010110010010111010010
to vrednost želim spremeniti v naslednji celici v hex obliko

fukcija bin2hex podpira inf do 10bitov zato ne pride v poštev. Na spletu sem našel VB modul z sledečo kodo (ki deluje do neke mere, oz za manjše vrednosti):

Function BinToHex(Binary As String)
Dim Value&, i&, Base#: Base = 1
For i = Len(Binary) To 1 Step -1
Value = Value + IIf(Mid(Binary, i, 1) = "1", Base, 0)
Base = Base * 2
Next i
BinToHex = Hex(Value)
End Function

Če je rezultat manjši od cca 7F8B25D2 zgornji modul preračuna iz BIN v HEX vrednu, če pa je preračunana vrednost višja od cca 7F8B25D2
pa mi vrže napako #vredn!

Help
smile-1.gif
 

doto

Fizikalc
25. jul 2007
3.175
0
36
Koda:
Function BinToHex(Binary As String)
    Dim Value, mFrom, mTo
    Dim i, j, byteCount, Base, Out
    
    
    Out = ""
    byteCount = Int(Len(Binary) / 8)
    If Len(Binary) Mod 8 > 0 Then
        byteCount = byteCount + 1
    End If
    
    For j = 1 To byteCount Step 1
        
        mFrom = Len(Binary) - (j - 1) * 8
        mTo = mFrom - 8
        If mTo < 0 Then
            mTo = 0
        End If
        
        Base = 1
        Value = 0
        For i = mFrom To mTo + 1 Step -1
            Value = Value + IIf(Mid(Binary, i, 1) = "1", Base, 0)
            Base = Base * 2
        Next i
        
        Out = Hex(Value) & Out
        
    Next j
 

Odyssey

Pripravnik
9. okt 2007
756
3
18
ni dovolj če dodam end function mi rez izračuna 0

Tak da še verjetno nekaj manjka v zgornjem modulu
smile-1.gif


Lp
 

doto

Fizikalc
25. jul 2007
3.175
0
36
sorry pri C/P sem dve vrstici zgubil

Koda:
 Function BinToHex(Binary As String)
    Dim Value, mFrom, mTo
    Dim i, j, byteCount, Base, Out
    
    
    Out = ""
    byteCount = Len(Binary) / 8
    If Len(Binary) Mod 8 > 0 Then
        byteCount = byteCount + 1
    End If
    
    For j = 1 To byteCount Step 1
        
        mFrom = Int(Len(Binary) - (j - 1) * 8)
        mTo = mFrom - 8
        If mTo < 0 Then
            mTo = 0
        End If
        
        Base = 1
        Value = 0
        For i = mFrom To mTo + 1 Step -1
            Value = Value + IIf(Mid(Binary, i, 1) = "1", Base, 0)
            Base = Base * 2
        Next i
        
        Out = Hex(Value) & Out
        
    Next j
   
    BinToHex = Out
End Function