Reading hex to int from a binary string
luc.traonmilin at gmail.com
Thu Oct 8 23:52:33 CEST 2009
On Oct 8, 11:13 pm, "Diez B. Roggisch" <de... at nospam.web.de> wrote:
> Luc schrieb:
> > Hi all,
> > I read data from a binary stream, so I get hex values as characters
> > (in a string) with escaped x, like "\x05\x88", instead of 0x05.
> > I am looking for a clean way to add these two values and turn them
> > into an integer, knowing that calling int() with base 16 throws an
> > invalid literal exception.
> > Any help appreciated, thanks.
> Consider this (in the python interpreter):
> >>> chr(255)
> >>> chr(255) == r"\xff"
> >>> int(r"ff", 16)
> In other words: no, you *don't* get hex values. You get bytes from the
> stream "as is", with python resorting to printing these out (in the
> interpreter!!!) as "\xXX". Python does that so that binary data will
> always have a "pretty" output when being inspected on the REPL.
> But they are bytes, and to convert them to an integer, you call "ord" on
> So assuming your string is read bytewise into two variables a & b, this
> is your desired code:
> >>> a = "\xff"
> >>> b = "\xa0"
> >>> ord(a) + ord(b)
> HTH, Diez
Sorry I was not clear enough. When I said "add", I meant concatenate
because I want to read 0x0588 as one value and ord() does not allow
However you pointed me in the right direction and I found that int
(binascii.hexlify(a + b, 16)) does the job.
More information about the Python-list