Steven Taschuk staschuk at telusplanet.net
Thu Jun 26 14:50:15 CEST 2003

```Quoth Sorin Marti:
[...]
> That is not exactly what I meant. I've found a solution (a is the binary
> data):
>
> b = binascii.hexlify(a)
>
> For example it gives me C8 which is a HEX-Value. How to change this one
> into a decimal? (The decimal should be 130, right?)

200, actually; hex C = 12, so hex C8 = 12*16 + 8 = 200.

Each byte represents a number in the range [0..255].  Those
numbers may be obtained with the ord function, as Andrew noted:

>>> bytes
'def inplac'
>>> map(ord, bytes)
[100, 101, 102, 32, 105, 110, 112, 108, 97, 99]

These are numbers, so you can, e.g., do arithmetic with them.
They are neither hex numbers nor decimal numbers; 'hex' and
'decimal' describe notations by which numbers may be represented,
not numbers themselves.  So, when you ask for the hex value, it
seems you want a string containing characters which represent the
number in hexadecimal notation.  The hex function does that, again
as Andrew noted:

>>> numbers = map(ord, bytes)
>>> [hex(num)[2:] for num in numbers]
['64', '65', '66', '20', '69', '6e', '70', '6c', '61', '63']

(I've cut out the leading '0x' which this function produces.)  As
you've discovered, binascii.hexlify does this all in one step --
turns a string containing bytes into a string containing

>>> import binascii
>>> binascii.hexlify(bytes)
'64656620696e706c6163'

If, for some reason, you wanted to obtain numbers from such a
string, you could do it this way, for example:

>>> def hex2numbers(s):
...     numbers = []
...     for i in range(0, len(s), 2):
...         numbers.append(int(s[i:i+2], 16))
...     return numbers
...
>>> hex2numbers(binascii.hexlify(bytes))
[100, 101, 102, 32, 105, 110, 112, 108, 97, 99]

--
Steven Taschuk                staschuk at telusplanet.net
"I tried to be pleasant and accommodating, but my head
began to hurt from his banality."   -- _Seven_ (1996)

```