SSブログ

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 するのが正しいのだろうか?というのがいまいちよくわからない。


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。