EndianStream [D言語]
Dの標準ライブラリ (Phobos) の EndianStream というクラスが便利そうだ。というかD言語以外でも似たようなものがあるのかもしれないけど。
要はストリームのエンディアンを指定してあげるとシステムエンディアンに合わせてひっくり返すなりそのままで通すなりということをしてくれる。
import std.cstream;
import std.system;
int main(char[][] args)
{
File o = new File("a.tmp", FileMode.Out);
o.printf("\x01\x02\x03\x04\x05\x06\x07\x08");
o.close();
{
File i = new File("a.tmp", FileMode.In);
ushort x, y; // 16bit
uint z; // 32 bit
i.read(x);
i.read(y);
i.read(z);
printf("%04x, %04x, %08x\n", x, y, z);
i.close();
}
{
File j = new File("a.tmp", FileMode.In);
EndianStream i = new EndianStream(j, Endian.BigEndian);
ushort x, y; // 16bit
uint z; // 32 bit
i.read(x);
i.read(y);
i.read(z);
printf("%04x, %04x, %08x\n", x, y, z);
i.close();
}
return 0;
}
これを Windows でコンパイルして動かすとこうなる。
0201, 0403, 08070605 0102, 0304, 05060708
ただし下の例では i と j のどちらを close するのが正しいのだろうか?というのがいまいちよくわからない。
コメント 0