Some files contain numbers that have a fixed endianness, independent from the endianness of the CPU DeuTex happens to run on. These call for some special treatment, as the C language has no provision for reading and writing integers otherwise than in the native endianness.
To read an integer from a file with a particular endianness, use
fread_i16_le()
, fread_i16_be()
,
fread_i32_le()
and fread_i32_be()
.
The first argument is the file descriptor, the second argument is a
pointer on a variable that will receive the value read from the file.
To write an integer to a file with a particular endianness, use
fwrite_i16_le()
, fwrite_i16_be()
,
fwrite_i32_le()
and fwrite_i32_be()
.
The first argument is the file descriptor, the second argument is the
value to write.
To read an integer with a particular endianness from a memory area,
use read_i16_le()
, read_i16_be()
,
read_i32_le()
and read_i32_be()
.
The first argument is a pointer on the memory area, the second
argument is a pointer on a variable that will receive the value read
from the memory area.
Alternatively, you can use the peek_i*()
functions that
take no second argument but instead return the read value.
To write an integer with a particular endianness to a memory area,
use write_i16_le()
, write_i16_be
,
write_i32_le()
and write_i32_be()
.
The first argument is a pointer on the memory area, the second
argument is the value to write.
Mnemonic to remember the arguments order : the object that has a defined endianness is considered central and therefore always comes first.
Here is some sample code and the result of running it.
fwrite_i32_be (stdout, 0x12345678); fwrite_i32_le (stdout, 0x12345678); fwrite_i16_be (stdout, 0xabcd); fwrite_i16_le (stdout, 0xabcd);
12 34 56 78 78 56 34 12 AB CD CD AB