|
| fprintf(), fputc() Fra : Niels |
Dato : 12-05-03 22:14 |
|
Hej,
er der en paen maade hvordan jeg kan skrive en unsigned int til en fil?
Det skal vaere paa binaer form, altsaa ikke ASCII, hvorved jeg saa ikke
kan bruge fprintf().
Hidtil har jeg altid brudt tallet op i enkelte bytes som jeg saa skref
til en stream ved fputc(), men der maa vel vaere en mere elegant metode?
Et tal vil jeg skrive som et 4-byte ord (unsigned) paa formen
lsb 2.byte 3.byte msb
men det ville vaere en fordel hvis der fantes en funktion hvor man selv
kan definere formen eller lign.?
Nogen forslag?
mvh
Niels
| |
Jakob Nielsen (12-05-2003)
| Kommentar Fra : Jakob Nielsen |
Dato : 12-05-03 22:19 |
|
> er der en paen maade hvordan jeg kan skrive en unsigned int til en fil?
> Det skal vaere paa binaer form, altsaa ikke ASCII, hvorved jeg saa ikke
> kan bruge fprintf().
fwrite kan bruges
| |
Bertel Brander (12-05-2003)
| Kommentar Fra : Bertel Brander |
Dato : 12-05-03 22:33 |
|
Niels skrev:
> Hej,
>
> er der en paen maade hvordan jeg kan skrive en unsigned int til en fil?
> Det skal vaere paa binaer form, altsaa ikke ASCII, hvorved jeg saa ikke
> kan bruge fprintf().
> Hidtil har jeg altid brudt tallet op i enkelte bytes som jeg saa skref
> til en stream ved fputc(), men der maa vel vaere en mere elegant metode?
> Et tal vil jeg skrive som et 4-byte ord (unsigned) paa formen
> lsb 2.byte 3.byte msb
> men det ville vaere en fordel hvis der fantes en funktion hvor man selv
> kan definere formen eller lign.?
>
Hvis du kan stille dig tilfreds med den rækkefølge som din compiler
vælger at gemme dem i på den platform hvor du gemmer dem kan du bruge
fwrite (& fread til at læse dem tilbage). Hvis ikke er du nød til at
bruge fputc.
/b
| |
Niels (12-05-2003)
| Kommentar Fra : Niels |
Dato : 12-05-03 22:52 |
|
On Mon, 12 May 2003 23:32:57 +0200, Bertel Brander wrote:
> Niels skrev:
>> Hej,
>>
>> er der en paen maade hvordan jeg kan skrive en unsigned int til en fil?
>> Det skal vaere paa binaer form, altsaa ikke ASCII, hvorved jeg saa ikke
>> kan bruge fprintf().
>> Hidtil har jeg altid brudt tallet op i enkelte bytes som jeg saa skref
>> til en stream ved fputc(), men der maa vel vaere en mere elegant
>> metode? Et tal vil jeg skrive som et 4-byte ord (unsigned) paa formen
>> lsb 2.byte 3.byte msb
>> men det ville vaere en fordel hvis der fantes en funktion hvor man selv
>> kan definere formen eller lign.?
>>
>>
> Hvis du kan stille dig tilfreds med den rækkefølge som din compiler
> vælger at gemme dem i på den platform hvor du gemmer dem kan du bruge
> fwrite (& fread til at læse dem tilbage). Hvis ikke er du nød til at
> bruge fputc.
>
> /b
Tak for svarene!
Ville dog have vaeret rarest med en platformuaf. loesning. (Men det kan
vel klares med nogle checks, saa den ikke kan kompileres hvis det ikke er
lsb msb paa en eller anden maade).
mvh
Niels
| |
Jakob Nielsen (13-05-2003)
| Kommentar Fra : Jakob Nielsen |
Dato : 13-05-03 10:14 |
|
> Ville dog have vaeret rarest med en platformuaf. loesning. (Men det kan
> vel klares med nogle checks, saa den ikke kan kompileres hvis det ikke er
> lsb msb paa en eller anden maade).
Løsningen er som sådan platformuafhængig... dine datafiler skrevet i et
system kan bare ike nødvendigvis bruges ved indlæsning i et andet.
Programmet som sådan virker perfekt på alle platforme.
| |
Kent Friis (13-05-2003)
| Kommentar Fra : Kent Friis |
Dato : 13-05-03 15:42 |
|
Den Mon, 12 May 2003 23:52:16 +0200 skrev Niels:
>On Mon, 12 May 2003 23:32:57 +0200, Bertel Brander wrote:
>
>> Niels skrev:
>>> Hej,
>>>
>>> er der en paen maade hvordan jeg kan skrive en unsigned int til en fil?
>>> Det skal vaere paa binaer form, altsaa ikke ASCII, hvorved jeg saa ikke
>>> kan bruge fprintf().
>>> Hidtil har jeg altid brudt tallet op i enkelte bytes som jeg saa skref
>>> til en stream ved fputc(), men der maa vel vaere en mere elegant
>>> metode? Et tal vil jeg skrive som et 4-byte ord (unsigned) paa formen
>>> lsb 2.byte 3.byte msb
>>> men det ville vaere en fordel hvis der fantes en funktion hvor man selv
>>> kan definere formen eller lign.?
>>>
>>>
>> Hvis du kan stille dig tilfreds med den rækkefølge som din compiler
>> vælger at gemme dem i på den platform hvor du gemmer dem kan du bruge
>> fwrite (& fread til at læse dem tilbage). Hvis ikke er du nød til at
>> bruge fputc.
>>
>> /b
>
>Tak for svarene!
>Ville dog have vaeret rarest med en platformuaf. loesning. (Men det kan
>vel klares med nogle checks, saa den ikke kan kompileres hvis det ikke er
>lsb msb paa en eller anden maade).
Så kig på htons/htonl og ntohs/ntohl
n=network byte order
h=host byte order
l=long int
s=short int
så htons = host byte order to network byte order, short int.
Mvh
Kent
--
If I wanted a blue screen, I would type "xsetroot -solid blue"
- not D:\WINNT\SETUP
| |
|
|