Vb:llä ascii luku -> binääriseksi?

Miten pystyn muuntamaan ascii merkkijonon binääriseksi luvuksi. Esim. ascii 1024 on neljä ascii merkkiä(tavua) ja binäärisenä kaksi merkkiä(tavua).
7536
Äänestä

Muut lukivat myös

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 ;)

Äänestä
  • 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)

    Äänestä

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 :)

Äänestä
  • 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ä.

    Äänestä

  • öö... kirjoitti:

    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

    Äänestä

  • vbguru kirjoitti:

    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.

    Äänestä

  • vbguru kirjoitti:

    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

    "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.

    Äänestä

Kommentoi aloitusta


öö... kirjoitti:

Miten pystyn muuntamaan ascii merkkijonon binääriseksi luvuksi. Esim. ascii 1024 on neljä ascii merkkiä(tavua) ja binäärisenä kaksi merkkiä(tavua).

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu