LittleEndian のバイナリデータを入出力するとのことであれば、
先の投稿に書いた通り、基本的には、
> もし、IntelMac のバイトオーダー(LittleEndian)に合わせてファイルを読み書きするなら、
> NSSwapHostIntToLittle() 等で LittleEndian にした値をファイルに書き込み、
> ファイルから読み出す時には NSSwapLittleIntToHost() 等を使って変数に読み込みます。
となるかと思います。
例えば、書き込みの方は、
#include <stdio.h>
#include <stdlib.h>
int main (int argc, const char * argv[]) {
// insert code here...
long long_data;
short short_data;
FILE *fp;
const char filename[256]="out.bin";
long_data=512;
short_data=256;
// 追加
long long_data_inLittleEndian = NSSwapHostLongToLittle( long_data );
short short_data_inLittleEndian = NSSwapHostShortToLittle( short_data );
if((fp = fopen(filename, "wb"))==NULL) exit(EXIT_FAILURE);
fwrite( &long_data_inLittleEndian, 4, 1, fp); // 変更
fwrite( &short_data_inLittleEndian, 2, 1, fp); // 変更
fclose(fp);
return 0;
}
で、読み込みも同様に、
{ long long_data;
short short_data;
long long_data_inLittleEndian;
short short_data_inLittleEndian;
// ファイルから、long_data_inLittleEndian、short_data_inLittleEndian に fread() などを使って読み込み。
// 例えば、fread( &long_data_inLittleEndian, 4, 1, fp );
long_data = NSSwapLittleLongToHost( long_data_inLittleEndian );
short_data = NSSwapLittleShortToHost( short_data_inLittleEndian );
// 以降、計算には long_data, short_data を使う。
}
なお、long_data_inLittleEndian、short_data_inLittleEndian は、
型が long や short など、一見、整数値のようですが、Byte の並びが逆で、整数値としては使ってはいけません。
なお、long の変数は、64bit 環境では 8byte ( sizeof(long) == 8 ) になります。( Mac OS X や Unix など。Windows-64bit では long は 4byte。)
なので、fwrite( &long_data_inLittleEndian, 4, 1, fp); などで、"4" と指定すると、64bit 環境では正常に動作しません。ご注意下さい。
long や int でなく、サイズが明確な int32_t, uint64_t などの型も使えますし、
バイトオーダー変更の関数として CFSwapInt64HostToLittle(), CFSwapInt32HostToLittle() などもあります。
64bit環境/32bit環境の両方でファイルを共通にするなら、ファイルの読み書きではそれらを使うことも検討すると良いと思います。
( 64bit 環境での変数のサイズ(4byte/8byteなど)は、「LP64」や「LLP64」などで検索するといろいろ出てくると思います。)