Miten pystyn muuntamaan ascii merkkijonon binääriseksi luvuksi. Esim. ascii 1024 on neljä ascii merkkiä(tavua) ja binäärisenä kaksi merkkiä(tavua).
Vb:llä ascii luku -> binääriseksi?
öö...
7536
0Äänestä
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 7
Vanhimmat
Sulla on käsitteet sekaisin:
Desimaaliluku(10 kanta): 1024
Heksaluku(16 kanta): 0400
Binääriluku(2 kanta): 000010000000000
Visual basicin toteutukseen en ota kantaa ;)
Tämä ei ole visual basiccia mutta toiminee esimerkkinä.
def itoa(i, base):
digits = "0123456789abcdefghijklmnopqrstuwvxyz"
l = []
while i:
n,i = i%base, i/base
l.append(digits[n])
l.reverse()
return ''.join(l)
merkkijonon "ABCD" muuttamista biteiksi?
"A" ascii-koodi desimaalisena on 65, bitteinä se on 01000001.
"B" ascii-koodi desimaalisena on 66, bitteinä se on 01000010.
"C" ascii-koodi on desimaalisena 67, bitteinä se on 01000011.
"D" ascii-koodi desimaalisena on 68, bitteinä se on 01000100.
Merkin ascii-koodin desimaalisena saat esim.
Asc("A") palauttaa luvun 65.
Miten muuttaa 65 biteiksi, en tiedä valmista funktiota, itse olen tehnyt siten, että jaetaan muunnettavaa lukua 2:lla ja jos jako menee tasan, bitti saa arvon 0, jos jakojäännökseksi jää 1, se on sitten sen bitin arvo. Ehkä huonosti selitin, mutta en nyt ehdi enempää.
Tarkoititkohan edes tuota :)
Asetin ehkä kysymykseni huonosti. Tarkoitus olisi saada desimaali luvusta joka on kirjoitettu ascii merkkeinä vastaava bitti muotoinen. esim. 1024 on neljä ascii-merkkiä kun se muunnetaan bittimuotoon se on kaksi 8 bittistä tavua . tavu2=0000 0100 tavu1=0000 0000. eli onko vb semmoista käskyä.
Kokeileppa tätä koodia, itse olen tehnyt joskus noin, nyt tähän tarpeeseen viilasin. Kuten asiat yleensäkin, voi tehdä useammalla eri tavalla, tämä toimii ja on selkeä, ainakin tästä pitäisi ymmärtää miten se on rakennettu. Esim. tuon tavujen muodostuksen voisi tehdä toisinkin.
Tuohon desimluku arvoksi vaan haluttu luku, kannattaa tehdä aliohjelmaksi, jota sitten kutsutaan annetun desimaaliluvun kera.
Dim b(32) As Integer
Dim desimluku, kokonais As Double
Dim binaariluku As String
Dim tavu1, tavu2, tavu3, tavu4 As String
Private Sub Command1_Click()
'suurin 32 bittinen luku desimaalisena on 4294967295
desimluku = 4294967295#
For s = 1 To 32
'nollataan kaikki bitit
b(s) = 0
'tutkitaan meneekö jako tasan vai jääkö jakojäännöstä,
'jos jakojäännös, bitti tehdään ykköseksi
kokonais = Int(desimluku / 2)
If desimluku > kokonais * 2 Then b(s) = 1
desimluku = kokonais
'muodostetaan 32 bitin jono yksittäisistä biteistä
binaariluku = binaariluku & b(s)
Next s
'muodostetaan edellämuodostetusta 32 bittisesta merkkijonosta 4 tavua
For s = 8 To 1 Step -1
tavu1 = tavu1 & b(s)
Next s
For s = 16 To 9 Step -1
tavu2 = tavu2 & b(s)
Next s
For s = 24 To 17 Step -1
tavu3 = tavu3 & b(s)
Next s
For s = 32 To 25 Step -1
tavu4 = tavu4 & b(s)
Next s
Print binaariluku
Print tavu1
Print tavu2
Print tavu3
Print tavu4
End Sub
kannattaa lisätä vielä rivit
binaariluku = ""
tavu1 = ""
tavu2 = ""
tavu3 = ""
tavu4 = ""
jotta em. jonot eivät kasva ja kasva joka kerta edellisen perään.
"Dim desimluku, kokonais As Double"
Nyt 'desimluku' on tyyppiä variant. Jos haluaa senkin Double tyyppiseksi po:
Dim desimluku As Double, kokonais As Double
Ja sitten itse joskus tekemäni int->bin muunnin:
Private Sub tobin(ByRef b() As String, ByVal l As Long)
Dim p As Long
p = 2 ^ 12
For i = 1 To 13
If (l \ p = 1) Then
b(14 - i) = "1"
l = l - p
Else
b(14 - i) = "0"
End If
p = p / 2
Next i
End Sub
Eli funktiolle annetaan kokonaisluku 'l' ja se palauttaa stringin 'b'. Eli luvun muodossa '...10011'. Rajoituksena näkyy olevan max 13 bittinen luku.