Reading hex to int from a binary string

Luc luc.traonmilin at gmail.com
Fri Oct 9 18:29:58 CEST 2009


On Oct 9, 10:45 am, "Diez B. Roggisch" <de... at nospam.web.de> wrote:
> Luc schrieb:
>
>
>
> > 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)
> >> '\xff'
> >>  >>> chr(255) == r"\xff"
> >> False
> >>  >>> int(r"ff", 16)
> >> 255
>
> >> 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
> >> them.
>
> >> 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)
> >> 415
>
> >> 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
> > that.
>
> (ord(a) << 8) + ord(b)
>
> Diez

Yes that too. But I have four bytes fields and single bit fields to
deal with as well so I'll stick with struct.

Thanks.




More information about the Python-list mailing list