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. Thanks. -- http://mail.python.org/mailman/listinfo/python-list