Câu trả lời:
Bạn đang tìm kiếm chr
chức năng.
Dường như bạn đang trộn các biểu diễn thập phân của số nguyên và biểu diễn hex của số nguyên, vì vậy nó không hoàn toàn rõ ràng những gì bạn cần. Dựa trên mô tả bạn đã đưa ra, tôi nghĩ một trong những đoạn này cho thấy những gì bạn muốn.
>>> chr(0x65) == '\x65'
True
>>> hex(65)
'0x41'
>>> chr(65) == '\x41'
True
Lưu ý rằng điều này khá khác với một chuỗi chứa một số nguyên dưới dạng hex . Nếu đó là những gì bạn muốn, hãy sử dụng hex
nội dung.
chr
hoàn toàn không liên quan đến ASCII - nó chỉ đơn giản là lấy một số và tạo ra một giá trị một byte trong đó giá trị thứ tự của byte là số. Các bảng mã tương thích ASCII và ASCII phát huy tác dụng khi bạn viết và hiển thị các chuỗi phụ.
'A'
một cách khác để viết và hiển thị '\x41'
. Tất cả str
thực sự quan tâm là thực tế đây là sáu mươi lăm. Để làm cho mọi thứ trở nên dễ hiểu và có thể sử dụng được bởi con người, nó thường trở thành A.
Thế còn hex()
?
hex(255) # 0xff
Nếu bạn thực sự muốn có \
ở phía trước, bạn có thể làm:
print '\\' + hex(255)[1:]
repr(chr(255)) # '\xff'
cũng đạt được điều này
Thử:
"0x%x" % 255 # => 0xff
hoặc là
"0x%X" % 255 # => 0xFF
Tài liệu Python nói: "giữ cái này dưới gối của bạn: http://docs.python.org/l Library / index.html "
Hãy để tôi thêm cái này, bởi vì đôi khi bạn chỉ muốn biểu diễn một chữ số:
'{:x}'.format(15)
> f
Và bây giờ với f''
chuỗi định dạng mới, bạn có thể làm:
f'{15:x}'
> f
LƯU Ý: 'f' ban đầu
f'{15:x}'
là để biểu thị một chuỗi định dạng
Nếu bạn muốn đóng gói một cấu trúc có giá trị <255 (một byte không dấu, uint8_t) và kết thúc bằng một chuỗi gồm một ký tự, có lẽ bạn đang tìm định dạng B thay vì c . C chuyển đổi một ký tự thành một chuỗi (không quá hữu ích) trong khi B chuyển đổi một số nguyên.
struct.pack('B', 65)
(Và vâng, 65 là \ x41, không phải \ x65.)
Lớp struct cũng sẽ thuận tiện xử lý endianness cho giao tiếp hoặc sử dụng khác.
Lưu ý rằng đối với các giá trị lớn, hex()
vẫn hoạt động (một số câu trả lời khác không):
x = hex(349593196107334030177678842158399357)
print(x)
Python 2: 0x4354467b746f6f5f736d616c6c3f7dL
Python 3:0x4354467b746f6f5f736d616c6c3f7d
Đối với một thông điệp RSA được giải mã, người ta có thể làm như sau:
import binascii
hexadecimals = hex(349593196107334030177678842158399357)
print(binascii.unhexlify(hexadecimals[2:-1])) # python 2
print(binascii.unhexlify(hexadecimals[2:])) # python 3
Tôi muốn một số nguyên ngẫu nhiên được chuyển đổi thành một chuỗi hex sáu chữ số có dấu # ở đầu. Để có được điều này tôi đã sử dụng
"#%6x" % random.randint(0xFFFFFF)
"#%6x" % random.randint(0x0, 0xFFFFFF)
. (Có một thiếu %
trước 6
và randint
mất 2 tham số -lower và giới hạn trên-)
Với format()
, theo ví dụ định dạng , chúng ta có thể làm:
>>> # format also supports binary numbers
>>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42)
'int: 42; hex: 2a; oct: 52; bin: 101010'
>>> # with 0x, 0o, or 0b as prefix:
>>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42)
'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010'
(int_variable).to_bytes(bytes_length, byteorder='big'|'little').hex()
Ví dụ:
>>> (434).to_bytes(4, byteorder='big').hex()
'000001b2'
>>> (434).to_bytes(4, byteorder='little').hex()
'b2010000'
Ngoài ra, bạn có thể chuyển đổi bất kỳ số nào trong bất kỳ cơ sở sang hex. Sử dụng mã một dòng này ở đây thật dễ dàng và đơn giản để sử dụng:
hex(int(n,x)).replace("0x","")
Bạn có một chuỗi n
là số của bạn và x
cơ sở của số đó. Đầu tiên, thay đổi nó thành số nguyên và sau đó thành hex nhưng hex có 0x
ở đầu tiên vì vậy replace
chúng tôi loại bỏ nó.