question about using std.bitmanip.read

Charles via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Nov 6 20:12:01 PST 2015


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.


More information about the Digitalmars-d-learn mailing list