Hệ thập lục phân trong Python


76

Làm cách nào để chuyển đổi từ thập phân sang thập lục phân theo định dạng sau (ít nhất hai chữ số, không đệm, không có tiền tố 0x)?

Đầu vào: 255 Đầu ra:ff

Đầu vào: 2 Đầu ra:02

Tôi đã thử hex(int)[2:]nhưng có vẻ như nó hiển thị ví dụ đầu tiên nhưng không hiển thị ví dụ thứ hai.



Tôi đã thử hex (int) [2:] nhưng có vẻ như nó hiển thị ví dụ đầu tiên nhưng không hiển thị ví dụ thứ hai.
VikkyB

Câu hỏi và câu trả lời sẽ kém hữu ích hơn nếu không có tuyên bố rõ ràng về "định dạng sau" cụ thể là gì. Có thể là "ít nhất hai chữ số, không đệm, không có tiền tố 0x"?
LarsH

Có thể có bản sao của chức năng Trang trí Hex để
chèn các

Câu trả lời:


151

Sử dụng format()chức năng với một '02x'định dạng.

>>> format(255, '02x')
'ff'
>>> format(2, '02x')
'02'

Phần 02yêu format()cầu sử dụng ít nhất 2 chữ số và sử dụng các số không để đệm nó theo độ dài, xnghĩa là hệ thập lục phân viết thường.

Các định dạng kỹ thuật Mini Ngôn ngữ cũng mang đến cho bạn Xcho đầu ra hex chữ hoa, và bạn có thể thêm tiền tố lĩnh vực chiều rộng với #bao gồm một 0xhoặc 0Xtiền tố (tùy thuộc vào thời tiết bạn sử dụng xhoặc Xlà định dạng). Chỉ cần lưu ý rằng bạn cần điều chỉnh độ rộng trường để cho phép thêm 2 ký tự đó:

>>> format(255, '02X')
'FF'
>>> format(255, '#04x')
'0xff'
>>> format(255, '#04X')
'0XFF'

Tôi đang gặp sự cố trong đó tiền tố thập lục phân sẽ có chữ "X" viết hoa nếu đặt định dạng sử dụng đầu ra hex viết hoa. Đây dường như không phải là trường hợp trong ví dụ của bạn. Đây có phải chỉ là vấn đề với phiên bản Python cục bộ của tôi không? Tôi đang sử dụng phiên bản 2.7.9.
jwp36

@ jwp36: không, đó là một sai lầm trong câu trả lời của tôi, bây giờ đã được sửa lại. Lời xin lỗi của tôi.
Martijn Pieters

3
để xác định các định dạng trong chuỗi đầu ra'{:02x}'.format(255)
JuanPablo

1
@JuanPablo: chỉ làm điều đó trong một chuỗi lớn hơn . Việc sử dụng str.format()chỉ để phân tích cú pháp một vị trí duy nhất đang khiến Python phải làm việc nhiều hơn (vì nội bộ điều này vẫn sử dụng format(255, '02x')cho một vị trí đó).
Martijn Pieters

25

Tôi nghĩ đây là những gì bạn muốn:

>>> def twoDigitHex( number ):
...     return '%02x' % number
... 
>>> twoDigitHex( 2 )
'02'
>>> twoDigitHex( 255 )
'ff'

-8

Một giải pháp khác là:

>>> "".join(list(hex(255))[2:])
'ff'

Có lẽ là một câu trả lời cổ xưa, nhưng có chức năng.


2
Tương tự như một câu trả lời khác, câu trả lời này không phải là số không. Ví dụ, "".join(list(hex(2))[2:])đánh giá thành '2', không '02'.
therealrootuser

1
Điều này đồng nghĩa với hex(int)[2:]từ câu hỏi. Tại sao bạn lập danh sách chỉ để tham gia lại?
wjandrea

Tại sao đăng câu trả lời này nếu bạn đã đồng ý rằng có một câu trả lời tốt hơn?
ryry1985
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.