Toon posts:

[vb6]string array converteren naar binair array

Pagina: 1
Acties:

Verwijderd

Topicstarter
weet iemand of het mogelijk is om een array met strings (die wel allemaal dec. getallen zijn) te converteren naar een byte array dat alsvolgt is opgebouwd:

alle getallen(string) uit eerste kolom Array(0,x) worden binaire waarden bestaande uit 3 bits.

alle getallen(string) uit tweede kolom Array(1,x) worden binaire waarden bestaande uit 4 bits.

alle getallen(string) uit derdekolom Array(2,x) worden binaire waarden bestaande uit 12 bits.

Kan dit zonder dat je nullen hoeft bij te vullen?
(Ik bedoel als je bijvoorbeeld de string 2 hebt wat binair 10 wordt en je wilt 3 bits dat je er dan zelf 010 van moet maken)

  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

Wat je wil kan natuurlijk gemaakt worden. Je zult het resultaat wel moeten bewaren als een string anders raak je je voorloop nul(len) kwijt. Je hebt in feite genoeg aan een kleine functie die de getallen voor je omrekent.
code:
1
2
3
4
5
6
7
8
9
10
11
12
Function LngToBin(ByVal Source As Long, ByVal OutputLength As Byte) As String
  Dim lngBits   As Long
  Dim lngLoop   As Long
  Dim strResult As String

  lngBits = 2 ^ (OutputLength - 1)
  For lngLoop = 1 To OutputLength
    strResult = strResult & IIf(lngBits And Source, "1", "0")
    lngBits = lngBits \ 2
  Next
  LngToBin = strResult
End Function


Stel dat je als input het getal 17 geeft met een gewenste uitvoer van 3 bits, je zult dan als resultaat '001' terug krijgen. Als je nou als gewenste uitvoer 8 bits opgeeft dan zal de functie '00010001' als resultaat geven.

[ Voor 23% gewijzigd door Lorn op 19-08-2004 16:17 ]


Verwijderd

Topicstarter
bedankt Lorn!

werkt perfect!
Bij deze heb ik je naam opgenomen in de comments van de sourcecode van mijn app.

  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

Cool, graag gedaan :) Blij te horen dat de routine deed wat je wou. Ik heb voor mezelf de routine nog even uitgebreid, je kan de uitvoer nu ook laten formateren in groepjes van 4 bits.


Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
Function LngToBin(ByVal Source As Long, ByVal OutputLength As Byte, _
                  Optional FormatOutput As Boolean = False) As String
'-------------------------------------------------------------------------------
' LngToBin (Function)
'  Zet een positief heel getal om naar binaire representatie
'
' Scope : Public
'
' Parameter(s):
'  {in}     Source          (LONG)
'    Het getal dat omgezet moet worden naar binaire representatie
'  {in}     OutputLength    (BYTE)
'    Het aantal bytes waarop het getal uitgelijnd moet worden. Als dit kleiner
'    is dan het aantal bits dat nodig is om het getal weer te geven dan zal de
'    uitvoer niet kloppen.
'  {in/out} [FormatOutput]  (BOOLEAN = False)
'    Geef TRUE mee om het resultaat te laten opdelen in groepjes van 4 bits.
'
' Result: STRING
'  Het getal dat als invoer is opgegeven in binaire representatie.
'  BV: Het getal 18 met als uitvoer 8 bits levert als resultaat '00010010', als
'      FormatOutput is opgegeven dan is het resultaat '0001 0010'. Het getal 18
'      met als uitvoer 4 bits levert '0010' op als resultaat.
'-------------------------------------------------------------------------------
  Dim lngBits   As Long
  Dim lngLoop   As Long
  Dim bytPos    As Byte
  Dim strResult As String
  Dim strTemp   As String

  'Converteer het getal naar zijn binaire representatie
  lngBits = 2 ^ (OutputLength - 1)
  For lngLoop = 1 To OutputLength
    'Controleer per macht van 2 of de bit aan of uit staat
    strResult = strResult & IIf(lngBits And Source, "1", "0")
    lngBits = lngBits \ 2
  Next
  'Alleen het resultaat formateren als dat gewenst is
  If FormatOutput Then
    'Begin vooraan in de string
    bytPos = 1
    'Loop doorlopen totdat de hele result string is gedaan
    While bytPos <= Len(strResult)
      'Na de eerste keer door de lus te zijn gegaan moet er steeds een
      'scheidingsteken worden toegevoegd tussen de groepjes van 4 bits
      If bytPos > 1 Then strTemp = strTemp & " "
      'Als de lengte van de result string geen veelvoud van 4 is dan
      'is heeft het eerste groepje bits een afwijkende grote
      If (bytPos = 1) And Not ((Len(strResult) Mod 4) = 0) Then
        'Kopieer de eerste bits, dit zijn er maximaal 3 als de lengte
        'geen veelvoud van 4 is
        strTemp = Mid$(strResult, bytPos, (Len(strResult) Mod 4))
        bytPos = bytPos + (Len(strResult) Mod 4)
      Else
        'Kopieer een groepje van 4 bits
        strTemp = strTemp & Mid$(strResult, bytPos, 4)
        bytPos = bytPos + 4
      End If
    Wend
    'Geef het geformateerde resultaat terug
    LngToBin = strTemp
  Else
    'Geef het ongeformateerde resultaat terug
    LngToBin = strResult
  End If
End Function

[ Voor 7% gewijzigd door Lorn op 20-08-2004 10:08 . Reden: Layout bijgewerkt ]