วิธีใช้ hex () โดยไม่มี 0x ใน Python


93

hex()ฟังก์ชั่นในหลามทำให้ตัวละครนำ0xในด้านหน้าของจำนวน มีอยู่แล้วที่จะบอกว่าอย่าใส่หรือไม่? ดังนั้นจะ0xfa230fa230

รหัสคือ

import fileinput
f = open('hexa', 'w')
for line in fileinput.input(['pattern0.txt']):
   f.write(hex(int(line)))
   f.write('\n')

2
คุณสามารถหั่นไฟล์0x.
Ashwini Chaudhary

3
@AshwiniChaudhary ฉันคิดว่าเขากำลังถามว่าจะหั่น 0x
ฉันได้อย่างไร

คำตอบ:


187
>>> format(3735928559, 'x')
'deadbeef'

34
ต้องรักdeadbeefตัวอย่างโอเล่ และformat()เป็นวิธีที่ดีที่สุดในการทำเช่นนี้
Martijn Pieters

58

ใช้รหัสนี้:

'{:x}'.format(int(line))

ช่วยให้คุณระบุตัวเลขได้ด้วย:

'{:06x}'.format(123)
# '00007b'

สำหรับ Python 2.6 ให้ใช้

'{0:x}'.format(int(line))

หรือ

'{0:06x}'.format(int(line))

8
การใช้format()ฟังก์ชั่นนั้นง่ายกว่าคุณไม่ได้ใช้ฟังก์ชันการเทมเพลตใด ๆ เพียงแค่จัดรูปแบบเท่านั้น ถ้าหากคุณแม่มีเป็น{:..}สำหรับหนึ่งค่าย้ายไปformat(value, '..')แทน
Martijn Pieters

โดยใช้f.write('{:x}'.format(hex(int(line))))ข้อความว่าValueError: zero length field name in format
mahmood

formatต้องการ int ไม่ใช่สตริง:f.write('{:x}'.format(int(line)))
eumiro

17

คุณสามารถเขียน

hex(x)[2:]

เพื่อลบอักขระสองตัวแรกออก


3
สิ่งนี้ไม่ปลอดภัยต่อการเปลี่ยนแปลงของผลลัพธ์ในอนาคต
Stefano Sanfilippo

2
นอกจากนี้ใน Python 2 ที่มีตัวเลขยาวจะทำให้เกิดผลลัพธ์แปลก ๆ :>>> hex(3735928559)[2:] 'deadbeefL'
jamylak

@esseks: ฉันสงสัยว่าพวกเขาจะเปลี่ยนรูปแบบผลลัพธ์ก่อนการเปิดตัวครั้งใหญ่ครั้งต่อไป คุณจะมีความเข้ากันไม่ได้อื่น ๆ อยู่ดี
Janus Troelsen

9
สิ่งนี้จะแตกหากxเป็นลบ
DSM


7

การจัดรูปแบบสตริงแบบเก่า:

In [3]: "%02x" % 127
Out[3]: '7f'

สไตล์ใหม่

In [7]: '{:x}'.format(127)
Out[7]: '7f'

การใช้ตัวพิมพ์ใหญ่เป็นอักขระรูปแบบจะให้เลขฐานสิบหกเป็นตัวพิมพ์ใหญ่

In [8]: '{:X}'.format(127)
Out[8]: '7F'

เอกสารอยู่ที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.