On Saturday, 7 November 2015 at 03:53:14 UTC, Nicholas Wilson wrote:
On Saturday, 7 November 2015 at 03:19:44 UTC, Charles wrote:
Hi guys,

It's me again... still having some issues pop up getting started, but I remain hopeful I'll stop needing to ask so many questions soon.

I'm trying to use std.bitmanip.read; however, am having some issues using it. For basic testing I'm just trying to use:

    read!double(endianess, ubyteArr).writeln;

endianess is an Endian from std.system, and ubyteArr is an 8 byte ubyte[].

When I run this I get:

Error: template std.bitmanip.read cannot deduce function from argument types !(double)(Endian, ubyte[]), candidates are: std.bitmanip.read(T, Endian endianness = Endian.bigEndian, R)(ref R range) if (canSwapEndianness!T && isInputRange!R && is(ElementType!R : const(ubyte)))
dmd failed with exit code 1.


Clearly that didn't work, so I tried excluding the endianess:

    read!double(ubyteArr).writeln;

and that does work! But its the wrong byte order, so its incorrect anyways.

I went to std.bitmanip to look for unittests using the Endian, and the only one that does uses read!(T, endianness), which needs endianness to be known at compile time, which I don't have.

Any suggestions?

Cheat!

T read(T,R)(Endian endianness , R r)
{
         if(endianness == Endian.bigEndian)
return std.bitmanip.read!(T,Endian.bigEndian,R)(r);
         else if (endianness == Endian.littleEndian)
return std.bitmanip.read!(T,Endian.littleEndian,R)(r);
}

Thanks!

but...
you are on a little endian system (bigEndian gave wrong byte order )

The actual use case is reading a binary file of unknown endianness. I don't think I'm that fortunate sadly.

Reply via email to