
On Sep 3, 2010, at 12:31 PM, Christian Henning wrote:
Hi Kenneth,
DBA (doing business as) Noel.
I'm not quite sure what you're doing but you seem to be picking off consecutive 3 bit sequences in the buf vector and interpreting them as integers? For example, the bit_range for p2 references bit_offset 3 into the first byte while p3 references bit 6 in the first byte. And indeed the value for v2 is 5 which is what I'd expect though v3's value is 1 rather than 4.
When reading a 3bit tiff image for instance I would have a byte array and need to pick off 3bit unsigned integers. There was a bug in gil that I have fixed. I also would like to add some test code to make sure we can detect problems earlier. But that test code needs to run on big and little endian machines.
So I'd naively I'd expect the big endian bit sequence above to yield:
101 101 100 110 110 111 011 011
resulting in values for v1 to v8 as:
5 5 4 6 6 7 3 3
Seems like bytes are read left to right on big endian machines.
Yes.
Could you do me a favor and run again the code below.
Here's the bit pattern (0xDB,0x6D,0xB6). In decimal it's (219,109,182). Yes, updated against trunk and recompiled. The code below never enters the else clause (for big endian) so I modified your code by hand (the version I ran is attached). v1 = v2 = v3 = 5 v4 = v5 = v6 = 3 v7 = v8 = 0 -- Noel