Bạn có thể sử dụng hex trong Python không?

Đôi khi, bạn có thể cần lưu cục bộ đối tượng Python của mình để sử dụng sau hoặc Chuyển mạng. Python có các thư viện tuyệt vời để tuần tự hóa như Json và Pickle

Tuần tự hóa đang lưu trữ các cấu trúc dữ liệu trong chương trình để chúng không biến mất sau khi chương trình kết thúc

Ngoài ra còn có thư viện soái ca nhưng nó nguyên thủy hơn và không thể xử lý một số kỹ thuật nhất định như thể hiện lớp và đệ quy. Marshal gần với json hơn trong phạm vi tuần tự hóa của nó

Vì vậy, khi nào bạn sẽ sử dụng dưa chua, cpickle, json hoặc ujson?

cpickle và ujson là các phiên bản nhanh hơn của các thư viện tương ứng tận dụng lợi thế của việc triển khai C trong Python. Vì vậy, chúng sẽ luôn thuận lợi vì lý do tốc độ

Ngoài ra, json là một phiên bản tuần tự hóa an toàn và dễ đọc hơn so với pickle đi kèm với chi phí tốc độ

Mặc dù bạn có thể xử lý hầu hết mọi cấu trúc dữ liệu trong Python bằng Json nhưng nó sẽ không hiệu quả với các tệp lớn hoặc các đối tượng không phổ biến. Mặt khác, Pickle hoạt động ở một điểm tuyệt vời, nơi bạn muốn làm việc với các tệp lớn (nhiều GB) và vẫn không muốn bị làm phiền với các giải pháp cơ sở dữ liệu

Vấn đề là tùy thuộc vào ứng dụng của bạn, bạn có thể phải coi chừng các lỗ hổng bảo mật mà dưa đưa vào hệ thống, vì vậy, thông thường nên tìm kiếm các giải pháp cơ sở dữ liệu hoặc json trước khi sử dụng dưa khi có thể

Hàm này rất hữu ích nếu bạn muốn chuyển đổi một số nguyên thành một chuỗi thập lục phân, có tiền tố là “0x”

Hãy xem cách chúng ta có thể sử dụng chức năng này


Sử dụng hàm hex() của Python

Hàm hex() của Python có cú pháp rất đơn giản

hex_string = hex(val)

Ở đây, val có thể là số nguyên, nhị phân, bát phân hoặc thập lục phân

Hãy xem nhanh một số ví dụ

print(hex(1000))  # decimal
print(hex(0b111))  # binary
print(hex(0o77))  # octal
print(hex(0XFF))  # hexadecimal

đầu ra

0x3e8
0x7
0x3f
0xff

Sử dụng Python hex() trên một đối tượng tùy chỉnh

Chúng ta cũng có thể sử dụng hex() trên một đối tượng tùy chỉnh. Tuy nhiên, nếu chúng ta muốn sử dụng nó thành công, chúng ta phải định nghĩa phương thức __index__() dunder cho lớp của chúng ta

Phương thức hex() sẽ gọi __index__(), vì vậy chúng ta phải triển khai nó. Điều này phải trả về một giá trị, có thể là số thập phân/nhị phân/bát phân/thập lục phân

class MyClass:
    def __init__(self, value):
        self.value = value
    def __index__(self):
        print('__index__() dunder method called')
        return self.value


my_obj = MyClass(255)

print(hex(my_obj))

đầu ra

__index__() dunder method called
0xff

Thật vậy, như bạn có thể thấy, nó trả về những gì chúng ta mong đợi

Đầu tiên, hex() gọi phương thức __index__ trên lớp tùy chỉnh của chúng tôi

Sau đó, nó chuyển đổi giá trị được trả về thành chuỗi thập lục phân (255 -> “0xff”)


Phần kết luận

Trong bài viết này, chúng ta đã tìm hiểu về cách sử dụng hàm hex() để chuyển đổi các giá trị số thành chuỗi thập lục phân

Hàm hex() trong Python được sử dụng để tạo giá trị hex của đối số số nguyên. Nó nhận một đối số số nguyên và trả về một số nguyên được chuyển đổi thành chuỗi thập lục phân. Trường hợp muốn lấy giá trị thập lục phân của float thì dùng float. hàm hex(). Chữ ký của chức năng được đưa ra dưới đây

Chữ ký

Thông số

số nguyên. Đó là một giá trị số nguyên được chuyển đổi thành một chuỗi hex

Trở lại

Nó trả về một chuỗi thập lục phân

Hãy xem một số ví dụ về hàm hex() để hiểu chức năng của nó

Hàm hex() trong Python Ví dụ 1

Một ví dụ đơn giản để lấy giá trị thập lục phân của số thập phân nguyên

đầu ra

Hàm hex() trong Python Ví dụ 2

Nó chỉ nhận đối số số nguyên nếu chúng ta vượt qua cái khác, nó sẽ báo lỗi cho bàn điều khiển

đầu ra

TypeError: 'float' object cannot be interpreted as an integer

Hàm hex() trong Python Ví dụ 3

Để lấy giá trị hex của float, hãy sử dụng float. lục giác(). Nó không ném bất kỳ lỗi nào. Xem ví dụ bên dưới

đầu ra

0x1.8000000000000p+0
-0x1.dc4cccccccccdp+7

Hàm

class Foo:    
    def __index__(self):
        return 10

f1 = Foo()
print(hex(f1))
# '0xa'
2 tích hợp sẵn của Python nhận một đối số số nguyên và trả về một chuỗi thập lục phân có tiền tố
class Foo:    
    def __index__(self):
        return 10

f1 = Foo()
print(hex(f1))
# '0xa'
3. Nếu bạn gọi
class Foo:    
    def __index__(self):
        return 10

f1 = Foo()
print(hex(f1))
# '0xa'
4 trên một số không phải là số nguyên
class Foo:    
    def __index__(self):
        return 10

f1 = Foo()
print(hex(f1))
# '0xa'
5, thì nó phải xác định phương thức
class Foo:    
    def __index__(self):
        return 10

f1 = Foo()
print(hex(f1))
# '0xa'
6 trả về một số nguyên liên quan đến
class Foo:    
    def __index__(self):
        return 10

f1 = Foo()
print(hex(f1))
# '0xa'
5. Nếu không, nó sẽ ném một
class Foo:    
    def __index__(self):
        return 10

f1 = Foo()
print(hex(f1))
# '0xa'
8

Bạn có thể sử dụng hex trong Python không?

Đối số
class Foo:    
    def __index__(self):
        return 10

f1 = Foo()
print(hex(f1))
# '0xa'
9Một giá trị số nguyên hoặc đối tượng triển khai phương thức
class Foo:    
    def __index__(self):
        return 10

f1 = Foo()
print(hex(f1))
# '0xa'
6. Giá trị trả về
>>> hex(11.14)
Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    hex(11.14)
TypeError: 'float' object cannot be interpreted as an integer
1Trả về một chuỗi số bát phân, có tiền tố là
class Foo:    
    def __index__(self):
        return 10

f1 = Foo()
print(hex(f1))
# '0xa'
3.
Input : hex(1)
Output : '0x1'

Input : hex(2)
Output : '0x2'

Input : hex(4)
Output : '0x4'

Input : hex(8) 
Output : '0x8'

Input : hex(10)
Output : '0xa'

Input : hex(11)
Output : '0xb'

Input : hex(256)
Output : '0x100'

Python hex() Video

Hàm hex() của Python -- Không phải là một trò ảo thuật

Bạn có thể sử dụng hex trong Python không?

Xem video này trên YouTube

Nhưng trước khi chúng ta tiếp tục, tôi rất vui được giới thiệu với bạn cuốn sách Python mới của tôi Python One-Liners (Amazon Link)

Nếu bạn thích một lớp lót, bạn sẽ YÊU cuốn sách. Nó sẽ dạy cho bạn mọi thứ cần biết về một dòng mã Python. Nhưng nó cũng là phần giới thiệu về khoa học máy tính, khoa học dữ liệu, máy học và thuật toán. Vũ trụ trong một dòng Python

Bạn có thể sử dụng hex trong Python không?

Sách được phát hành năm 2020 với nhà xuất bản sách lập trình đẳng cấp thế giới NoStarch Press (San Francisco)

liên kết. https. //Không có tinh bột. com/pythononeliners

Python hex() cho Đối tượng tùy chỉnh

Nếu bạn gọi

class Foo:    
    def __index__(self):
        return 10

f1 = Foo()
print(hex(f1))
# '0xa'
4 trên một đối tượng không phải là số nguyên hoặc đối tượng tùy chỉnh
class Foo:    
    def __index__(self):
        return 10

f1 = Foo()
print(hex(f1))
# '0xa'
5, nó phải xác định phương thức
class Foo:    
    def __index__(self):
        return 10

f1 = Foo()
print(hex(f1))
# '0xa'
6 trả về một số nguyên được liên kết với
class Foo:    
    def __index__(self):
        return 10

f1 = Foo()
print(hex(f1))
# '0xa'
5

class Foo:    
    def __index__(self):
        return 10

f1 = Foo()
print(hex(f1))
# '0xa'

Cách khắc phục “TypeError. đối tượng 'float' không thể được hiểu là một số nguyên”?

Hàm

>>> hex(11.14)
Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    hex(11.14)
TypeError: 'float' object cannot be interpreted as an integer
7 của Python chỉ có thể chuyển đổi các số nguyên từ bất kỳ hệ thống số nào (e. g. , thập phân, nhị phân, bát phân) sang hệ thập lục phân. Nó không thể chuyển đổi số float thành số thập lục phân. Vì vậy, nếu bạn chuyển một số float vào hàm
>>> hex(11.14)
Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    hex(11.14)
TypeError: 'float' object cannot be interpreted as an integer
7, nó sẽ trả về một giá trị
>>> hex(11.14)
Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    hex(11.14)
TypeError: 'float' object cannot be interpreted as an integer
9

>>> hex(11.14)
Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    hex(11.14)
TypeError: 'float' object cannot be interpreted as an integer

Để khắc phục lỗi này, bạn có thể làm tròn số float thành một số nguyên bằng cách sử dụng hàm

>>> 3.14.hex()
'0x1.91eb851eb851fp+1'
>>> 3.15.hex()
'0x1.9333333333333p+1'
0 tích hợp sẵn hoặc bạn viết hàm chuyển đổi tùy chỉnh của riêng mình

Làm cách nào để chuyển đổi số float thành số thập lục phân trong Python?

Để chuyển đổi một giá trị float đã cho thành giá trị hex, hãy sử dụng hàm

>>> 3.14.hex()
'0x1.91eb851eb851fp+1'
>>> 3.15.hex()
'0x1.9333333333333p+1'
1 trả về biểu diễn của một số dấu phẩy động dưới dạng một chuỗi thập lục phân bao gồm một
>>> 3.14.hex()
'0x1.91eb851eb851fp+1'
>>> 3.15.hex()
'0x1.9333333333333p+1'
2 ở đầu và một
>>> 3.14.hex()
'0x1.91eb851eb851fp+1'
>>> 3.15.hex()
'0x1.9333333333333p+1'
3 ở cuối và số mũ

Lưu ý rằng số mũ được cho dưới dạng lũy ​​thừa của 2 theo đó nó được chia tỷ lệ—ví dụ:

>>> 3.14.hex()
'0x1.91eb851eb851fp+1'
>>> 3.15.hex()
'0x1.9333333333333p+1'
4 sẽ được chia tỷ lệ thành
>>> 3.14.hex()
'0x1.91eb851eb851fp+1'
>>> 3.15.hex()
'0x1.9333333333333p+1'
5 khi sử dụng số mũ 3

>>> 3.14.hex()
'0x1.91eb851eb851fp+1'
>>> 3.15.hex()
'0x1.9333333333333p+1'

Ngoài ra, nếu bạn cần một biểu diễn thập lục phân không dấu phẩy động tương tự như hầu hết các trình chuyển đổi trực tuyến, hãy sử dụng lệnh

>>> 3.14.hex()
'0x1.91eb851eb851fp+1'
>>> 3.15.hex()
'0x1.9333333333333p+1'
6

import struct

def float_to_hex(f):
    return hex(struct.unpack('<I', struct.pack('<f', f))[0])


print(float_to_hex(3.14))
print(float_to_hex(88.88))

Đầu ra là biểu diễn bát phân của các giá trị đầu vào float

0x4048f5c3
0x42b1c28f

nguồn

  • https. //gregtoll. com/~gregstoll/floattohex/
  • https. //www. scadacore. com/công cụ/lập trình-máy tính/trực tuyến-hex-converter/
  • https. // stackoverflow. com/câu hỏi/23624212/làm thế nào để chuyển đổi-a-float-thành-hex

Bài toán con định dạng hex

Hãy xem xét một số biến thể định dạng của bài toán chuyển đổi hệ thập lục phân chuyển đổi một số thành chữ thường/chữ hoa và có/không có tiền tố. Chúng tôi sử dụng Ngôn ngữ đặc tả định dạng. Bạn có thể tìm hiểu thêm về chủ đề này trong hướng dẫn blog chi tiết của chúng tôi

Chúng tôi sử dụng ba biến thể giống hệt nhau về mặt ngữ nghĩa cho từng vấn đề chuyển đổi

Cách chuyển đổi một số thành chữ thường thập lục phân bằng tiền tố

>>> '%#x' % 12
'0xc'
>>> f'{12:#x}'
'0xc'
>>> format(12, '#x')
'0xc'

Cách chuyển đổi một số thành số thập lục phân chữ thường mà không cần tiền tố

>>> '%x' % 12
'c'
>>> f'{12:x}'
'c'
>>> format(12, 'x')
'c'

Cách chuyển đổi một số thành một chữ hoa thập lục phân với tiền tố

>>> '%#X' % 12
'0XC'
>>> f'{12:#X}'
'0XC'
>>> format(12, '#X')
'0XC'

Cách chuyển đổi một số thành một chữ hoa thập lục phân mà không cần tiền tố

>>> '%X' % 12
'C'
>>> f'{12:X}'
'C'
>>> format(12, 'X')
'C'

👉 Hướng dẫn đề xuất. Chuyển đổi chuỗi Hex thành số Hex trong Python

Tóm lược

Hàm

class Foo:    
    def __index__(self):
        return 10

f1 = Foo()
print(hex(f1))
# '0xa'
2 tích hợp sẵn của Python nhận một đối số số nguyên và trả về một chuỗi thập lục phân có tiền tố
class Foo:    
    def __index__(self):
        return 10

f1 = Foo()
print(hex(f1))
# '0xa'
3

class Foo:    
    def __index__(self):
        return 10

f1 = Foo()
print(hex(f1))
# '0xa'
0

Nếu bạn gọi

class Foo:    
    def __index__(self):
        return 10

f1 = Foo()
print(hex(f1))
# '0xa'
4 trên một số không phải là số nguyên
class Foo:    
    def __index__(self):
        return 10

f1 = Foo()
print(hex(f1))
# '0xa'
5, thì nó phải xác định phương thức
class Foo:    
    def __index__(self):
        return 10

f1 = Foo()
print(hex(f1))
# '0xa'
6 trả về một số nguyên liên quan đến
class Foo:    
    def __index__(self):
        return 10

f1 = Foo()
print(hex(f1))
# '0xa'
5

class Foo:    
    def __index__(self):
        return 10

f1 = Foo()
print(hex(f1))
# '0xa'

Nếu không, nó sẽ ném một

class Foo:    
    def __index__(self):
        return 10

f1 = Foo()
print(hex(f1))
# '0xa'
8

Đi đâu từ đây?

Đủ lý thuyết. Hãy thực hành một số

Các lập trình viên được trả sáu con số trở lên vì họ có thể giải quyết vấn đề hiệu quả hơn bằng cách sử dụng trí thông minh máy móc và tự động hóa

Để trở nên thành công hơn trong việc viết mã, hãy giải quyết nhiều vấn đề thực tế hơn cho người thực. Đó là cách bạn trau dồi những kỹ năng bạn thực sự cần trong thực tế. Rốt cuộc, việc sử dụng lý thuyết học tập mà không ai cần là gì?

Bạn xây dựng các kỹ năng mã hóa có giá trị cao bằng cách làm việc trên các dự án mã hóa thực tế

Bạn có muốn ngừng học với các dự án đồ chơi và tập trung vào các dự án mã thực tế giúp bạn kiếm tiền và giải quyết các vấn đề thực sự cho mọi người không?

🚀 Nếu câu trả lời của bạn là CÓ. , cân nhắc trở thành nhà phát triển Python tự do. Đó là cách tốt nhất để tiếp cận nhiệm vụ cải thiện kỹ năng Python của bạn—ngay cả khi bạn là người mới hoàn toàn

Nếu bạn chỉ muốn tìm hiểu về cơ hội làm việc tự do, vui lòng xem hội thảo trên web miễn phí của tôi “Cách xây dựng kỹ năng Python có thu nhập cao của bạn” và tìm hiểu cách tôi phát triển công việc viết mã của mình trực tuyến cũng như cách bạn có thể làm được—từ sự thoải mái của bạn

Tham gia hội thảo trên web miễn phí ngay bây giờ

Bạn có thể sử dụng hex trong Python không?

Chris

Trong khi làm việc với tư cách là một nhà nghiên cứu trong các hệ thống phân tán, Dr. Christian Mayer tìm thấy tình yêu của mình với việc dạy sinh viên khoa học máy tính

Để giúp sinh viên đạt được mức độ thành công Python cao hơn, anh ấy đã thành lập trang web giáo dục lập trình Finxter. com. Ông là tác giả của cuốn sách lập trình nổi tiếng Python One-Liners (NoStarch 2020), đồng tác giả của loạt sách tự xuất bản Coffee Break Python, người đam mê khoa học máy tính, cộng tác viên tự do và chủ sở hữu của một trong 10 blog Python lớn nhất thế giới

Niềm đam mê của anh ấy là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh ấy là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ nâng cao kỹ năng của mình. Bạn có thể tham gia học viện email miễn phí của anh ấy tại đây