| Kirjoittaja | Viesti | 
|       
 JPQ
 
 | Miten Ansi C:eellä kirjoitan 16bittisen luvun tiedostoon entäs miten sen luen sieltä? eli se veisi tilaa kaksi tavua en siis tarkoita luvun ascii esityksen kirjoitusta. Toki yritän itse sitä selvittää mutta valmista koodia mieluiten haluaisin. Ja tämä ei ole koulutyö. Tai edes kertokaa miten ANSI C funktioilla puolitan 16bit luvun kahdeksi 8bit luvuksi. Että sittenhän sen saisin talteen kirjoitamalla kaksi 8bit lukua eikö totta?| Keskiviikkona,  19. maaliskuuta, 2003 - klo 18.46: |  | 
 
 
 | 
|       
 Jon
 
 | size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)...| Keskiviikkona,  19. maaliskuuta, 2003 - klo 19.00: |  | 
 
 Eli kai se menee näin:
 
 fwrite( pointteri_lukuun, sizeof( WORD ), 1, tiedosto );
 
 http://www.introl.com/introl-demo/Libraries/C/ANSI_C/stdio/fread.html
 
 
 | 
|       
 JPQ
 
 | Mikä muuttuja tyyppi olisi sellainen joka olisi vakiona 16-bit eipä| Keskiviikkona,  19. maaliskuuta, 2003 - klo 19.30: |  | 
 tule mieleen ja onnistuikohan homma näin jaan bitin pyörittelyillä
 luvun kahdeksi 16bit luvuksi joidenarvot mahtuu 8bitiin ja
 teen tyyppi muunnoksen saaduille luvuille koska sehän onnistunee
 vaikka C kääntäjä varoittaakin. kirjoitan noi 8bit tavut tiedostoon
 oikein päin? eli hieman lisä apuja kiitos vielä kaipaisin.
 
 WORD ei liene standardi C kieltä vai olenko väärässä ? nyt olisi
 tarpeen olla koska amiga ei ole ainoa alusta.
 
 PS. Tosiaankin ratkaisu joka noudattaa ANSI C:eetä olisi tarpeen eli
 mitään alusta "roikkuvaa"...
 
 
 | 
|       
 Jon
 
 | short, tai onko se short int?| Keskiviikkona,  19. maaliskuuta, 2003 - klo 20.09: |  | 
 
 Jos kerran tavu kerrallaan kirjoitat niin etkö voisi siirtää pointteria yhden tavun eteenpäin ja kirjoittaa toisen tavun? Jos noita 16-bittisiä lukuja on paljon peräkkäin niin kirjoita kaikki kerralla.
 
 
 | 
|       
 JPQ
 
 | Jon: onko short aina varmasti 16bit täytyy tutkia se on minimi koko vaatimus mutta voi olla isompikin eli pulma on edelleen. Jollei ideani ole turvallinen & toimiva.| Keskiviikkona,  19. maaliskuuta, 2003 - klo 21.19: |  | 
 
 
 | 
|       
 Markus
 
 | Virallisesti C-kielessä short on vähintään 16 bittiä, mutta yleensä 16 bittiä, mitä se sitten tarkoittaakaan. Lähteenä tähän minulla on ATK-instituutin "C-kieli"-kirja, mitä itse pidän varsin hyvänä kirjana. Käyttämäni painos on vuodelta 1993.| Keskiviikkona,  19. maaliskuuta, 2003 - klo 22.23: |  | 
 
 
 | 
|       
 itix
 
 | Jos tarvitsee eri platformeille porttaantuvaa koodia kannattaa määritellä omat lukutyypit.| Keskiviikkona,  19. maaliskuuta, 2003 - klo 23.49: |  | 
 
 Esimerkiksi:
 
 typedef unsigned char  uint8;
 typedef char           int8;
 typedef unsigned short uint16;
 typedef short          int16;
 
 ja niin edelleen. Laittaa nuo johonkin headeriin.
 
 
 | 
|       
 JPQ
 
 | Markus: Ja kuten yritin sanoo hommassa pitää olla 16bittiä eikä yli eikä ali. Ja mun The C Programming Language (Brian W. Kernigham/Dennis M. Ritche) kirjassa lukee vähintään 16bittiä ja voi olla enempikin. Eikä mitään että yleensä sitä sun tätä. Kirjassa ei yleistetä jo siksi hyvä kirja. Ja ainoa C kirja josta minä tajuan jotain plus muutama jotka käyttää C kieltä esimerkeissään mutta ne ei opetakaan C:tä vaan esim. Viivanpiirtoa yms...| Keskiviikkona,  19. maaliskuuta, 2003 - klo 23.56: |  | 
 Itix: tämän olisi tarkoitus porttaua ties mille. Ja noi siis toimii vai kaikilla kunnon kääntäjillä ? eli mistään kivikautisista Aztec C tyyppisistä en tietenkään välitä. Eli hyvät kääntäjät ja pitää keksiä noille paremmat nimet. Ja sellaiset ettei tule Conflikteja.(Anteeksi jos vika sana on väärin).
 
 
 | 
|       
 Piru
 
 | Noniin, setä sanoo kans:| Keskiviikkona,  19. maaliskuuta, 2003 - klo 23.59: |  | 
 
 Binaaritiedoston kirjoittaminen (jos se sisältää muita tietotyyppejä kuin char), on aina portaantuvuusongelma: eri byteorderin omaavat laitteet pitävät muistissa sijaitsevan luvun omassa sisäisessä esitysmuodossaan. Vain c- lähdekooditasolla lukujen käsittely on aina samanlaista.
 
 Eli siis: Jos koodin *ja* tiedostojen pitää olla 100% porttaantuvia, ainut tapa on kirjoittaa & lukea luvut asciina, tai pilkkoa luvut 8-bit charreiksi ja kirjoitella & lukea luvut tavu kerrallaan (aina tietyssä järjestyksessä!).
 
 
 | 
|       
 Markus
 
 | Eihän yleistäminen sinällään mikään huono asia ole.| Torstaina,  20. maaliskuuta, 2003 - klo 8.32: |  | 
  Jos sanotaan, että short on vähintään 16 bittiä ja tarkennetaan, että kuitenkin yleensä nimenomaan 16 bittiä, niin siinähän vain tarkennetaan asiaa, lisätään informaatiota, kun se nyt sattuu olemaan totta, että short on yleensä 16 bittiä. 
 
 | 
|       
 Jon
 
 | Miten muuten Linuxissa hoituu tuo endianess-juttu? Onko siellä määritelty jotain makroja tai muuta?| Torstaina,  20. maaliskuuta, 2003 - klo 9.36: |  | 
 
 
 | 
|       
 JPQ
 
 | Piru: hyvä tietää ja tarkoitus kun olisi lukea/kirjoittaa ehkä joskus 16bit wav/aiff sampleja. Eli pitää ehkä määritellä koodia niin että siinä lippu josta tiedetään alustan byteorder.| Torstaina,  20. maaliskuuta, 2003 - klo 13.06: |  | 
 Markus: yleistäminen on paha koska jotkut ajattelee sen jälkeen automaattisesti tuohon voi noja>ta tyyliin se aina 16bit. jotkut ajattelee nykyään että 95-99% prosenttia on sama kuin 100% prosenttia. Eli siksi paha.
 PS. Hemmetin INTEL (Lausutaan In Hell,jos kielitaitoni pätee) minkä ongelman meille teit... koska sehän lienee se joka käyttää ainoastaan ja sen kanssa yhteensopivat väärää tavujärjestystä.
 
 
 | 
|       
 Markus
 
 | JPQ: Tarkkaan ottaen jos ilmaistaan, että short on "yleensä 16 bit", niin ei ole tehty yleistystä, että se on aina 16 bit, vaan tuohon ilmaisuunhan itsessään sisältyy tieto siitä, että se voi olla myös muuta. Yleensä-sana viitaa siihen, että short on 16 bit "usein" ei "aina".| Torstaina,  20. maaliskuuta, 2003 - klo 13.55: |  | 
 
 Käytännössä monet epäeksaktien tieteiden tulokset ovat jonkinlaisia yleistyksiä, jotka pohjautuvat tilastoihin. Ilman näitä yleistyksiä ei oikein mistään saataisi selvyyttä. Matemaattinen induktio on oma lukunsa, jolla saadaan todistettua absoluuttisen varmasti tulos yleistäen yksittäisestä tapauksesta yleiseen tapaukseen.
 
 
 | 
|       
 JPQ
 
 | Markus: eipä tuo antamasi teksti yleistänytkään noi mutta jotkut| Torstaina,  20. maaliskuuta, 2003 - klo 14.25: |  | 
 ihmiset lukee tuollaisen tekstin noin. Olen liikaa nähnyt ohjelmia
 yms. jotka pohjaa yleistykseen. Ja kärsinyt itsekkin yleistyksen
 pohjalta saadusta kohtelusta ihan ihmisenä siis.
 
 
 | 
|       
 itix
 
 | Headeri machine/endian.h auttanee tiedonjanoon :-)| Torstaina,  20. maaliskuuta, 2003 - klo 15.34: |  | 
 
 
 | 
|       
 JPQ
 
 | itix: tuollaista headeria ei mun kääntäjässä ole ja eikä varmaan kaikissa muissakaan...| Torstaina,  20. maaliskuuta, 2003 - klo 15.56: |  | 
 
 
 | 
|       
 itix
 
 | Jos kääntäjän mukana ei tule niin käy hakemassa netistä AmiTCP SDK tai Miami SDK jossa nuo ovat.| Torstaina,  20. maaliskuuta, 2003 - klo 18.54: |  | 
 
 
 | 
|       
 JPQ
 
 | itix: joopa joo mutta mistäs muiden alustajien käyttäjät saa sopivan. Miten esim. 16bit luvun jaan kahdeksi 8bit tavuksi ?| Torstaina,  20. maaliskuuta, 2003 - klo 21.01: |  | 
 
 
 | 
|       
 miksuh
 
 | Joo siis noita tietotyyppien maksimikokoja ei pitäs alkaa olettamaan, ne kun ei ole aina välttämättä samoja joka systeemissä. Edes int, short tai long ei välttämättä ole jokasysteemissa samanmittasia. Eli jos porttautuvaa koodia haluaa tehdä, niin kannattaa toi muistaa.| Perjantaina,  21. maaliskuuta, 2003 - klo 11.29: |  | 
 
 
 | 
|       
 miksuh
 
 | JPQ: Kannattaa mielessään ajatella noita lukuja binäärilukuina tossatapauksessa.| Perjantaina,  21. maaliskuuta, 2003 - klo 12.07: |  | 
 
 On tohon muitakin keinoja, mutta:
 
 Luvun 8 enemmän merkitsevää bittiä saa 8bit luvuksi siirtämällä bittejä 8 bittipaikkaa oikealle. ´Tai vaihtoehtosesti voi nollata ensin bittimaskilla 8 vähemmänmerkitsevää bittiä ja pyörittää sitten bittejä 8 bittipaikkaa oikealle.
 
 Vähemmän merkitsevät bitit saa niin että sopivalla bittimaskilla nollataan enemmän merkitsevän tavun bitit 16bit luvusta. Tuolloin jäljelle jää ne 8 vähemmänmerkitsevää bittiä.
 
 
 |