<?xml version="1.0" encoding="windows-1252"?>
<node id="178859" title="(tye)Re: Ascending vs descending bit order" created="2002-07-02 10:19:17" updated="2005-07-19 22:16:34">
<type id="11">
note</type>
<author id="22609">
tye</author>
<data>
<field name="doctext">
&lt;p&gt;
The difference is that "b" is broken because it expects/produces the bits in the &lt;b&gt;wrong&lt;/b&gt; order &amp;#91;"001" becomes chr(4)&amp;#93; while "B" is broken because short bit counts only deal with the &lt;i&gt;highest&lt;/i&gt; bits &amp;#91;"001" becomes chr(32)&amp;#93;. (: &amp;#91;If multiple adjacent "b"/"B" formats could extract/set successive bits within a single byte, then this combination would be more reasonable.&amp;#93;
&lt;/p&gt;&lt;p&gt;
So, if you are a normal person, you have to use "B" &lt;b&gt;and&lt;/b&gt; pad your binary strings (in front, that is, to the left) to multiples of 8 characters (for [pack]) and only use multiples of 8 as lengths after the "B" (for [unpack]).
&lt;/p&gt;&lt;p&gt;
It is called "ascending" bit order because it is assumed that you are reading the base-2 ASCII string (often confusingly called "binary" despite that term having way too many meanings in the context of [pack] and [unpack]) from left to right and, if you do that, the bits ascend in value from bit0=1, bit1=2, bit2=4, etc.  While with "descending" bit order the leftmost "0" or "1" represents bit8=128 and the bit values descend from there.
&lt;/p&gt;&lt;p&gt;
BTW, I find that the documentation for [pack]/[unpack] is rather ambiguous/confusing and it is very hard to make it completely unambiguous.  I often resort to testing via "perl -de 0" when I have a question about some detail of these two functions.  You might find that useful as well.
&lt;/p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- [tye] (but my friends call me "Tye")</field>
<field name="root_node">
178576</field>
<field name="parent_node">
178576</field>
</data>
</node>
