Hello Folks Hej Sven Här kommer varianten jag skrev: Eftersom jag alltid (som Andreas Hillqvist) vill vara bäst och göra optimalaByte till bit visning ?
Vill inte uppfinna hjulet igen.
Är det någon som har VB kod som omvandlar en Byte 0 - 255
till en textsträng visande ettor och nollor
tex. 32 = 0 0 1 0 0 0 0 0
tackar på forehand som tennisspelaren skulle säga
mvh
SvenSv: Byte till bit visning ?
Tror detta ska funka:
Private Function omvandlaTal(xx As Byte) As String
Dim i As Integer
Dim temp As Integer
Dim temp2 As String
temp = 128
For i = 8 To 1 Step -1
If xx Mod temp = xx Then
temp2 = temp2 & "0"
Else
temp2 = temp2 & "1"
xx = xx - temp
End If
temp = temp / 2
Next i
omvandlaTal = temp2
End FunctionSv: Byte till bit visning ?
Public Function CBinary(Value As Byte) As String
Dim Index As Byte
For Index = 0 To 7
If Value And 2 ^ Index Then
CBinary = "1" & CBinary
Else
CBinary = "0" & CBinary
End If
Next
End FunctionSv: Byte till bit visning ?
program kommer här min version. som omvandlar vilkert binärt tal (positiva) som helst upp till en LONG:s storlek.
Istället för att loopa igenom och testa bit för bit om den skall vara 0 eller 1
så kollar denna algoritm bara vilka bitar som skall vara ettställda.
Genom att använda log-funktionen kan man kolla om en bit är satt
eller inte.
Detta göra att den i bästa fall är O(0) och i sämsta fall O(n). I snitt
är den O(n/2). De andra metoderna med loopar är alltid O(n). Det betyder
att denna algoritms worst case scenario har samma ordonalitet som
de andra metoderna med loopar. Det kan bara bli bättre och snabbare
med denna metod alltså.
Sample Code =====================================
Private Function dec2bin(ByVal dec As Long) As String
Dim bit As byte
If dec < 0 Then '// Omvandla endast positival tal
dec2bin = "0"
Exit Function
Else
dec2bin = String(1 + Int(Log(dec) / (Log(2))), "0")
Do
bit = Int(Log(dec) / Log(2))
dec = dec - 2 ^ bit
Mid(dec2bin, Len(dec2bin) - bit, 1) = "1"
Loop Until dec = 0
End If
End Function
Sample Code =====================================
/peterh