Reading and converting binary file 2 bits at a time

Mike James via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Aug 27 05:40:05 PDT 2015


On Thursday, 27 August 2015 at 09:00:02 UTC, Andrew Brown wrote:
> Hi,
>
> I need to read a binary file, and then process it two bits at a 
> time. But I'm a little stuck on the first step. So far I have:
>
> import std.file;
> import std.stdio;
>
> void main(){
>   auto f = std.file.read("binaryfile");
>   auto g = cast(bool[])	f;
>   writeln(g);
> }
>
> but all the values of g then are just true, could you tell me 
> what I'm doing wrong? I've also looked at the bitmanip module, 
> I couldn't get it to help, but is that the direction I should 
> be looking?
>
> Thanks very much
>
> Andrew

How about...

module main;

import std.bitmanip;
import std.stdio;

struct Crumbs {
     @property ref ubyte whole() {
         return m_whole;
     }

     union {
         private ubyte m_whole;
         mixin(bitfields!(
             ubyte, "one",   2,
             ubyte, "two",   2,
             ubyte, "three", 2,
             ubyte, "four",  2
         ));
     }
}

void main(string[] argv)
{
     ubyte[] buffer = [123, 12, 126, 244, 35];
     Crumbs cmb;

     foreach (octet; buffer) {
         cmb.whole = octet;

         writefln("Crumb:       %08b", octet);
         writefln("Crumb one:   %s", cmb.one);
         writefln("Crumb two:   %s", cmb.two);
         writefln("Crumb three: %s", cmb.three);
         writefln("Crumb four:  %s", cmb.four);
     }
}


Regards, Mike.


More information about the Digitalmars-d-learn mailing list