...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

ビット列としての取り扱い

import std.stdio;
import std.outbuffer;
import std.bitmanip;

union Cast
{
	double value;
	mixin(bitfields!(
		uint, "low", 32,
		uint, "high", 32
	));
}

void main()
{
	OutBuffer ob = new OutBuffer;
	ob.write(12.34);
	ubyte[] a = ob.toBytes();
	double[] b = cast(double[])ob.toBytes();
	writeln("OutBuffer.toBytes(): ", a);
	writeln("cast(double[]): ", b[0]);
	
	uint[] d = cast(uint[])ob.toBytes();
	Cast c;
	c.low = d[0];
	c.high = d[1];
	writeln("Cast: ", c.value);
	
	assert(b[0] == 12.34);
	assert(c.value == 12.34);
}

もっと簡単にやれると思うんだけどなあ.どうやるんだろ.