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