Luc schrieb:
On Oct 9, 10:45 am, "Diez B. Roggisch" <de...@nospam.web.de> wrote:
Luc schrieb:



On Oct 8, 11:13 pm, "Diez B. Roggisch" <de...@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.

For the future: it helps describing the actual problem, not something vaguely similar - this will get you better answers, and spare those who try to help you the effort to come up with solutions that aren't ones.

Diez
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to