Convert a byte array to single bits in a array [Python 3.5]
<p>I am looking for a operation witch converts my byte array:</p>

<pre><code>mem = b'\x01\x02\xff'
</code></pre>

<p>in something like this:</p>

<pre><code>[ [0 0 0 0 0 0 0 1]
  [0 0 0 0 0 0 1 0]
  [1 1 1 1 1 1 1 1] ]
</code></pre>

<p>These are operations that I tried:</p>

<pre><code>import numpy as np

mem = b'\x01\x02\xff' #define my input
mem = np.fromstring(mem, dtype=np.uint8) #first convert to int

#print(mem) give me "[  1   2 255]" at this piont

mem = np.array(['{0:08b}'.format(mem[b]) for b in mem]) #now convert to bin
data= np.array([list(mem[b]) for b in mem]) #finally convert to single bits

print(data)
</code></pre>

<p>This code will crash at line 4.. <code>IndexError: index 255 is out of bounds for axis 0 with size 9</code>
Otherwise, it crash at line 5.. <code>IndexError: too many indices for array</code></p>

<p><strong>These are my Questions:</strong></p>

<p>Why are the number of spaces different after the conversion from hex to int?</p>

<p>Is that the reason that my next conversion from int to bin failed?</p>

<p>Finally, what is wrong with my <code>list</code> operation?</p>

<p>Thank you for your help! :)</p>

<p>I'm fairly certain the problem with your code is that you're assuming the <code>int</code> in each item in the list will become 8 bits (so <code>2</code> will, in your assumption, return <code>00000010</code>). But it doesn't (<code>2</code> = <code>10</code>), and that screws up your code.</p>

<p>For your last two lines, I think this should be fine:</p>

<pre class="lang-python prettyprint-override"><code>data = [list(str(bin(x))[2:]) for x in mem]
for a in range(len(data)):
    while len(data[a]) &lt; 8:
        data[a] = "0" + data[a]
</code></pre>

<p><code>str(bin(x))[2:]</code> converts to binary (because it returns <code>0b1</code> for <code>1</code>, you need to use <code>[2:]</code> to get <code>1</code>).</p>

<p>The last chunk of code is to "pad" out your numbers with extra <code>0</code>'s.</p>

python arrays hex bit