Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2013

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: How to read 12 bits from a stream ?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg131885] Re: How to read 12 bits from a stream ?
  • From: roby <roby.nowak at gmail.com>
  • Date: Wed, 23 Oct 2013 23:45:54 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • Delivered-to: l-mathgroup@wolfram.com
  • Delivered-to: mathgroup-outx@smc.vnet.net
  • Delivered-to: mathgroup-newsendx@smc.vnet.net
  • References: <l450c4$shl$1@smc.vnet.net>

Am Dienstag, 22. Oktober 2013 06:53:24 UTC+2 schrieb J=E1nos L=F6bb:
> Hi,
>
>
>
> I am trying to read a mixed file - binary and text -  with OpenRead and Read and BinaryRead, but I am not seeing a seek option, that is to move the pointer inside the file where I want it to be.  Of course I can do a read in a loop with a counter, but I hoped there is a better way to do it.
>
>
>
> The file is 16.1MB, the first 912 elements are characters and binary mixed, followed by 16MB binary section.  The binary in this second section is  packed in the way that 2 times 12 bits  of little endian value is packed into 3 bytes.  I need to unpack them and put them into big endian order.  I am not seeing how can I read 12 bits at once with BinaryRead, it is aligned at the multiples of 8 bits.
>
>
>
> Any good tip ?
>
>
>
> Thanks ahead,
>
> J=E1nos

Hi Janos,

SetStreamPosition[stream, pos]

does the positioning miracle

BinaryRead[stream, "UnsignedInteger24",ByteOrdering -> -1]
lets you read 24 bits

BinaryRead[stream, "UnsignedInteger24",ByteOrdering -> -1]//{BitAnd[#, 2^12- 1], BitAnd[BitShiftRight[#, 12], 2^12 - 1]} &
gets you two 12bit numbers.

Regards Robert



  • Prev by Date: Re: How to read 12 bits from a stream ?
  • Next by Date: Re: Exercise of Programming with Mathematica
  • Previous by thread: Re: How to read 12 bits from a stream ?
  • Next by thread: Principal Components