Trouble converting numbers to characters - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Trouble converting numbers to characters (/thread-21024.html) |
Trouble converting numbers to characters - Involute - Sep-11-2019 I'm reading numbers from a file which I want to write to a separate file as the ascii hex of the numbers. So, e.g., if I read in ff, I want to write out '0xff'. My code (below; just printing to console for now) works fine for some values, but not for others. Specifically, it can read/write ff (as above), but when it reads 80, it writes "0x20ac". This seems to be because it interprets 80 as a unicode character whose hex value is 0x20ac (8364 decimal). What am I doing wrong? Misusing hex() and/or ord()? Thanks for any tips. # Open output file with open("E:\\Karl\\Documents\\Sculpture\\Prime Time\\Digits\\1d_inv_conv.c", 'w') as g: # Open input file for reading in text mode with open("E:\\Karl\\Documents\\Sculpture\\Prime Time\\Digits\\1d_inv2.pbm", 'rt') as f: f.read(10) # Skip header while True: x = f.read(1) if x == '': # End of file? sys.exit() print(hex(ord(x))) RE: Trouble converting numbers to characters - perfringo - Sep-11-2019 Probably I don't get the problem, but ord() is for single characters: >>> help(ord) Help on built-in function ord in module builtins: ord(c, /) Return the Unicode code point for a one-character string. (END)This means that you can't use representation of 80 as string for ord() argument: >>> ord('80') Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: ord() expected a character, but string of length 2 found One can do: >>> print(*(hex(ord(x)) for x in '80')) 0x38 0x30 RE: Trouble converting numbers to characters - Involute - Sep-11-2019 The contents of the part of the file that are producing the erroneous behavior are FF FF FF 80 03 FF FF FF 00 03If I run print (ord(x)) on this section, the output is 255 255 255 8364 3 255 255 255 0 3I'm trying to figure out why that 80 (0x80) is being read as 8364 (0x20ac which is how it gets written to the file, even though print (hex(ord(8364))) throws an error). RE: Trouble converting numbers to characters - perfringo - Sep-12-2019 I don't understand how you run ord() on these without error. What I get: >>> ord(FF) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'FF' is not defined >>> ord('FF') Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: ord() expected a character, but string of length 2 found RE: Trouble converting numbers to characters - Involute - Sep-12-2019 Well, they worked for me except for that exception. I’ve since reworked the code without the ord() and it’s working fine now. |