kaksi 8bittistä lukua yhdeksi 16-bittiseksi luvuksi

Sovellukseni nauhoittaa ääntä 16-bitin tarkkuudella. Ääni tallennetaan byte-taulukkoon. Taulukossa esimerkiksi indeksissä [0] on 16:sta bitin eniten merkitsevät bitit ja indeksissä [1] 16:sta bitin vähiten merkitsevät bitit.

Eniten merkitsevän bitin ensimmäinen merkki ilmaisee onko luku positiivinen/negatiivinen: 0 = positiivinen, 1 = negatiivinen.

Ongelmana on saada tuo luku kokonaisuudessa byte-taulukosta ulos. Eli voin lukea tähän malliin: Int x = array[0], mutta tällöin saan vain 8-bittisiä lukuja (max. arvo 127), kun pitäisi saada 16-bittisiä arvoja (max. arvo 36000 jotain).

Kuinka voin yhdistää siis kaksi taulukossa olevaa 8-bittistä lukua yhdeksi 16-bittiseksi luvuksi?

Vielä esimerkki: Indeksi0: 01111111 indeksi1: 01111111

Pitäisi saada 16-bittinen luku 0111111101111111
3331
Äänestä

Muut lukivat myös

Vastaukset 3

Vanhimmat

x = 256 * array[0] array[1]

Tässä luvulla 256 kertominen vastaa 8 bitin siirtoa vasemmalle (= eniten merkitsevän bitin suuntaan).

Äänestä

Alla on esimerkki siitä miten se tehdään:

int value = (array[0]

Äänestä
  • Sain pelittämään tuon, ei ollutkaan kovin monimutkainen juttu ;).

    Äänestä

Kommentoi aloitusta


--;-- kirjoitti:

Sovellukseni nauhoittaa ääntä 16-bitin tarkkuudella. Ääni tallennetaan byte-taulukkoon. Taulukossa esimerkiksi indeksissä [0] on 16:sta bitin eniten merkitsevät bitit ja indeksissä [1] 16:sta bitin vähiten merkitsevät bitit.

Eniten merkitsevän bitin ensimmäinen merkki ilmaisee onko luku positiivinen/negatiivinen: 0 = positiivinen, 1 = negatiivinen.

Ongelmana on saada tuo luku kokonaisuudessa byte-taulukosta ulos. Eli voin lukea tähän malliin: Int x = array[0], mutta tällöin saan vain 8-bittisiä lukuja (max. arvo 127), kun pitäisi saada 16-bittisiä arvoja (max. arvo 36000 jotain).

Kuinka voin yhdistää siis kaksi taulukossa olevaa 8-bittistä lukua yhdeksi 16-bittiseksi luvuksi?

Vielä esimerkki: Indeksi0: 01111111 indeksi1: 01111111

Pitäisi saada 16-bittinen luku 0111111101111111

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