2012-02-09 66 views
77

Tôi có một số mã Perl trong đó hàm hex() chuyển đổi dữ liệu hex thành thập phân. Tôi có thể làm như thế nào trên Python?Làm cách nào để chuyển đổi hex sang thập phân bằng Python?

+1

Bạn có chắc chắn bạn muốn chuyển đổi dữ liệu vào "thập phân"? Hàm Perl chỉ đơn giản là chuyển đổi một chuỗi hex thành một số nguyên chứ không phải là một chuỗi thập phân. –

+0

@SvenMarnach tôi sử dụng hướng dẫn này perl hex() http://www.misc-perl-info.com/perl-hex.html "Chức năng này: có đối số là chuỗi thập lục phân (hoặc biểu thức sau khi đánh giá sẽ trả về một chuỗi thập lục phân) sẽ trả lại giá trị tương ứng thập phân " –

+1

@Sir D: bài viết đó rất khó hiểu. Như Sven nói, 'hex' chuyển đổi một chuỗi hex thành một giá trị số nguyên (được lưu trữ bên trong theo dạng nhị phân nhưng về cơ bản chỉ đơn giản là một giá trị số không có cơ số). Lệnh gọi 'print' sẽ chuyển giá trị đó thành chuỗi thập phân và in nó. – Borodin

Trả lời

139

Nếu bằng cách "dữ liệu hex" bạn có nghĩa là một chuỗi các hình thức

s = "6a48f82d8e828ce82b82" 

bạn có thể sử dụng

i = int(s, 16) 

để chuyển đổi nó thành một số nguyên và

str(i) 

để chuyển đổi nó thành một chuỗi thập phân.

+14

Tôi yêu Python. –

+0

Đối với số hex âm, điều này không hoạt động. –

+0

@EricWang Công trình này hoàn toàn phù hợp với các số âm: http://ideone.com/IHOQvp. Trừ khi bạn có một số âm được mã hóa ở định dạng bổ sung hai chiều rộng cố định, nhưng đó sẽ là một vấn đề khác với những gì được hỏi ở đây. (Gợi ý: sử dụng mô-đun 'struct' trong trường hợp đó.) –

26
>>> int("0xff", 16) 
255 

hoặc

>>> int("FFFF", 16) 
65535 

Read the docs.

+2

int (0xff) sẽ làm điều đúng. Nó chỉ yêu cầu một cơ sở rõ ràng nếu nó được chuyển thành một chuỗi. – cassm

12

Bạn có thể sử dụng một eval đen:

>>> ast.literal_eval('0xdeadbeef') 
3735928559 

Hoặc chỉ cần xác định cơ sở như là đối số để int:

>>> int('deadbeef', 16) 
3735928559 
+0

Điều này là hoàn hảo! =] – GalDude33

Các vấn đề liên quan