Python chuyển đổi chuỗi hex thành float

Xin chào!
Tôi đang lấy giá trị năng lượng từ api còn lại của pin năng lượng mặt trời. Chúng đến dưới dạng giá trị hex e. g. 0x4413934F
Chuyển đổi qua mẫu không thành công vì bạn chỉ có thể chuyển đổi hex sang int ở đó và điều này dẫn đến giá trị sai.

Qua phyton nó sẽ như thế này.
______77
Tôi có thể sử dụng tập lệnh pyhton bên trong mẫu để chuyển đổi giá trị không?

Để chuyển đổi một số thập lục phân đã cho thành một số thập phân trong Python, hãy gọi hàm dựng sẵn int() và chuyển số hex và base=16 làm đối số. int() chuyển đổi giá trị đã cho bằng cách sử dụng cơ số đã chỉ định và trả về số thập phân

Ví dụ

Trong ví dụ này, chúng tôi viết một hàm để đọc một số thập phân từ người dùng, chuyển đổi nó thành hex và in kết quả ra đầu ra tiêu chuẩn

Chương trình Python

h = input('Enter hex : ')
d = int(h, base=16)
print('Decimal :', d)

Đầu ra số 1

Enter hex : A2
Decimal : 162

Đầu ra #2

Enter hex : FFFA
Decimal : 65530

Tóm lược

Trong hướng dẫn Ví dụ về Python này, chúng ta đã học cách chuyển đổi số thập lục phân thành số thập phân bằng cách sử dụng hàm dựng sẵn int()

Đối với từ điển

z = x | y          # NOTE: 3.9+ ONLY
7 và
z = x | y          # NOTE: 3.9+ ONLY
8,
z = x | y          # NOTE: 3.9+ ONLY
9 trở thành một từ điển được kết hợp nông với các giá trị từ
z = x | y          # NOTE: 3.9+ ONLY
8 thay thế các giá trị từ
z = x | y          # NOTE: 3.9+ ONLY
7

  • Trong Trăn 3. 9. 0 trở lên (phát hành ngày 17 tháng 10 năm 2020). PEP-584, được thảo luận ở đây, đã được triển khai và cung cấp phương pháp đơn giản nhất

    z = x | y          # NOTE: 3.9+ ONLY
    
  • Trong Trăn 3. 5 hoặc cao hơn

    z = {**x, **y}
    
  • Trong Python 2, (hoặc 3. 4 hoặc thấp hơn) hãy viết một hàm

    Enter hex : A2
    Decimal : 162
    0

    và bây giờ

    Enter hex : A2
    Decimal : 162
    1

Giải trình

Giả sử bạn có hai từ điển và bạn muốn hợp nhất chúng thành một từ điển mới mà không làm thay đổi từ điển gốc

Enter hex : A2
Decimal : 162
2

Kết quả mong muốn là có được một từ điển mới (

z = x | y          # NOTE: 3.9+ ONLY
9) với các giá trị được hợp nhất và các giá trị của từ điển thứ hai sẽ ghi đè lên các giá trị từ từ điển đầu tiên

Enter hex : A2
Decimal : 162
4

Một cú pháp mới cho điều này, được đề xuất trong PEP 448 và có sẵn kể từ Python 3. 5, là

z = {**x, **y}

Và nó thực sự là một biểu thức duy nhất

Lưu ý rằng chúng ta cũng có thể hợp nhất với ký hiệu chữ

Enter hex : A2
Decimal : 162
60

và bây giờ

Enter hex : A2
Decimal : 162
61

Nó hiện đang hiển thị như được triển khai trong lịch phát hành cho 3. 5, PEP 478 và hiện tại nó đã được đưa vào mục Có gì mới trong Python 3. 5 tài liệu

Tuy nhiên, vì nhiều tổ chức vẫn đang sử dụng Python 2, nên bạn có thể muốn thực hiện việc này theo cách tương thích ngược. Cách cổ điển của Pythonic, có sẵn trong Python 2 và Python 3. 0-3. 4, là thực hiện điều này như một quy trình gồm hai bước

Enter hex : A2
Decimal : 162
62

Trong cả hai cách tiếp cận,

z = x | y          # NOTE: 3.9+ ONLY
8 sẽ đứng thứ hai và các giá trị của nó sẽ thay thế các giá trị của
z = x | y          # NOTE: 3.9+ ONLY
7, do đó,
z = {**x, **y}
5 sẽ trỏ đến
z = {**x, **y}
6 trong kết quả cuối cùng của chúng tôi

Chưa có trên Python 3. 5, nhưng muốn có một biểu thức duy nhất

Nếu bạn chưa sử dụng Python 3. 5 hoặc cần viết mã tương thích ngược và bạn muốn điều này trong một biểu thức duy nhất, cách hiệu quả nhất trong khi cách tiếp cận đúng là đặt nó trong một hàm

Enter hex : A2
Decimal : 162
63

và sau đó bạn có một biểu thức duy nhất

Enter hex : A2
Decimal : 162
1

Bạn cũng có thể tạo một hàm để hợp nhất một số lượng từ điển tùy ý, từ số không đến số lượng rất lớn

Enter hex : A2
Decimal : 162
65

Chức năng này sẽ hoạt động trong Python 2 và 3 cho tất cả các từ điển. e. g. từ điển đã cho

z = {**x, **y}
7 đến
z = {**x, **y}
8

Enter hex : A2
Decimal : 162
66

và các cặp khóa-giá trị trong

z = {**x, **y}
8 sẽ được ưu tiên hơn từ điển
z = {**x, **y}
7 đến
Enter hex : A2
Decimal : 162
01, v.v.

Phê bình các câu trả lời khác

Không sử dụng những gì bạn thấy trong câu trả lời được chấp nhận trước đây

Enter hex : A2
Decimal : 162
67

Trong Python 2, bạn tạo hai danh sách trong bộ nhớ cho mỗi lệnh, tạo danh sách thứ ba trong bộ nhớ có độ dài bằng với độ dài của hai danh sách đầu tiên được ghép lại với nhau, sau đó loại bỏ cả ba danh sách để tạo lệnh. Trong Python 3, điều này sẽ không thành công vì bạn đang thêm hai đối tượng

Enter hex : A2
Decimal : 162
02 lại với nhau, không phải hai danh sách -

Enter hex : A2
Decimal : 162
68

và bạn sẽ phải tạo chúng một cách rõ ràng dưới dạng danh sách, e. g.

Enter hex : A2
Decimal : 162
03. Đây là một sự lãng phí tài nguyên và sức mạnh tính toán

Tương tự, lấy hợp của

Enter hex : A2
Decimal : 162
04 trong Python 3 (_______105 trong Python 2. 7) cũng sẽ thất bại khi các giá trị là các đối tượng không thể băm được (ví dụ như danh sách). Ngay cả khi các giá trị của bạn có thể băm được, vì các bộ không có thứ tự về mặt ngữ nghĩa, nên hành vi không được xác định liên quan đến mức độ ưu tiên. Vì vậy, đừng làm điều này

Enter hex : A2
Decimal : 162
69

Ví dụ này minh họa điều gì sẽ xảy ra khi các giá trị không thể băm được

z = x | y          # NOTE: 3.9+ ONLY
90

Đây là một ví dụ trong đó

z = x | y          # NOTE: 3.9+ ONLY
8 nên được ưu tiên, nhưng thay vào đó, giá trị từ
z = x | y          # NOTE: 3.9+ ONLY
7 được giữ lại do thứ tự tùy ý của các tập hợp

z = x | y          # NOTE: 3.9+ ONLY
91

Một hack khác bạn không nên sử dụng

z = x | y          # NOTE: 3.9+ ONLY
92

Điều này sử dụng hàm tạo

Enter hex : A2
Decimal : 162
08 và rất nhanh và tiết kiệm bộ nhớ (thậm chí còn hơn một chút so với quy trình hai bước của chúng tôi) nhưng trừ khi bạn biết chính xác điều gì đang xảy ra ở đây (nghĩa là lệnh thứ hai đang được chuyển dưới dạng đối số từ khóa cho lệnh chính tả

Đây là một ví dụ về việc sử dụng đang được khắc phục trong django

Từ điển nhằm mục đích lấy các khóa có thể băm (e. g.

Enter hex : A2
Decimal : 162
09 hoặc bộ dữ liệu), nhưng phương thức này không thành công trong Python 3 khi khóa không phải là chuỗi

z = x | y          # NOTE: 3.9+ ONLY
93

Từ danh sách gửi thư, Guido van Rossum, người tạo ra ngôn ngữ này, đã viết

Tôi ổn với việc khai báo dict({}, **{1. 3}) bất hợp pháp, vì suy cho cùng đó là lạm dụng cơ chế **

Rõ ràng dict(x, **y) đang diễn ra dưới dạng "hack hay" cho "gọi x. cập nhật (y) và trả về x". Cá nhân tôi thấy nó đáng khinh hơn là ngầu

Theo sự hiểu biết của tôi (cũng như sự hiểu biết của người tạo ra ngôn ngữ) rằng mục đích sử dụng cho

Enter hex : A2
Decimal : 162
10 là để tạo từ điển cho mục đích dễ đọc, e. g

z = x | y          # NOTE: 3.9+ ONLY
94

thay vì

z = x | y          # NOTE: 3.9+ ONLY
95

Phản hồi bình luận

Bất chấp những gì Guido nói,

Enter hex : A2
Decimal : 162
11 phù hợp với đặc tả chính tả, btw. hoạt động cho cả Python 2 và 3. Thực tế là điều này chỉ hoạt động đối với các khóa chuỗi là hệ quả trực tiếp của cách thức hoạt động của các tham số từ khóa và không phải là sự thiếu sót của dict. Việc sử dụng toán tử ** ở đây cũng không phải là lạm dụng cơ chế, trên thực tế, ** được thiết kế chính xác để chuyển từ điển dưới dạng từ khóa

Một lần nữa, nó không hoạt động trong 3 khi các phím không phải là chuỗi. Hợp đồng gọi ẩn là các không gian tên lấy từ điển thông thường, trong khi người dùng chỉ phải chuyển đối số từ khóa là chuỗi. Tất cả các cuộc gọi khác đã thực thi nó.

Enter hex : A2
Decimal : 162
08 đã phá vỡ tính nhất quán này trong Python 2

z = x | y          # NOTE: 3.9+ ONLY
96

Sự không nhất quán này rất tệ khi triển khai Python khác (PyPy, Jython, IronPython). Do đó, nó đã được sửa trong Python 3, vì cách sử dụng này có thể là một thay đổi đột phá

Tôi trình bày với bạn rằng việc cố ý viết mã chỉ hoạt động trong một phiên bản của ngôn ngữ hoặc mã chỉ hoạt động với một số ràng buộc tùy ý nhất định là hành vi cố tình viết mã không hoạt động.

Thêm bình luận

Enter hex : A2
Decimal : 162
13 vẫn là giải pháp dễ đọc nhất cho Python 2. số lượng khả năng đọc

câu trả lời của tôi.

Enter hex : A2
Decimal : 162
14 thực sự có vẻ rõ ràng hơn nhiều đối với tôi, nếu chúng tôi thực sự quan tâm đến khả năng đọc. Và nó không tương thích về phía trước, vì Python 2 ngày càng không được dùng nữa

Enter hex : A2
Decimal : 162
15 dường như không xử lý các từ điển lồng nhau. nội dung của các khóa lồng nhau chỉ được ghi đè, không được hợp nhất [. ] Cuối cùng tôi đã bị đốt cháy bởi những câu trả lời không hợp nhất theo cách đệ quy này và tôi đã rất ngạc nhiên khi không ai đề cập đến nó. Theo cách giải thích của tôi về từ "hợp nhất", những câu trả lời này mô tả "cập nhật một lệnh này với một lệnh khác" và không hợp nhất

Đúng. Tôi phải giới thiệu bạn trở lại câu hỏi, yêu cầu hợp nhất nông của hai từ điển, với các giá trị của từ đầu tiên bị ghi đè bởi từ thứ hai - trong một biểu thức

Giả sử hai từ điển của từ điển, người ta có thể hợp nhất đệ quy chúng trong một chức năng duy nhất, nhưng bạn nên cẩn thận không sửa đổi từ điển từ cả hai nguồn và cách chắc chắn nhất để tránh điều đó là tạo một bản sao khi gán giá trị. Vì các khóa phải có thể băm được và do đó thường không thay đổi, nên việc sao chép chúng là vô nghĩa

z = x | y          # NOTE: 3.9+ ONLY
97

Cách sử dụng

z = x | y          # NOTE: 3.9+ ONLY
98

Việc đưa ra các trường hợp dự phòng cho các loại giá trị khác nằm ngoài phạm vi của câu hỏi này, vì vậy tôi sẽ chỉ cho bạn câu trả lời của tôi cho câu hỏi kinh điển trên "Từ điển hợp nhất từ ​​điển"

Ít hiệu quả hơn nhưng Ad-hocs chính xác

Những cách tiếp cận này kém hiệu quả hơn, nhưng chúng sẽ cung cấp hành vi đúng. Chúng sẽ kém hiệu quả hơn nhiều so với

Enter hex : A2
Decimal : 162
16 và
Enter hex : A2
Decimal : 162
17 hoặc giải nén mới vì chúng lặp qua từng cặp khóa-giá trị ở mức độ trừu tượng cao hơn, nhưng chúng tôn trọng thứ tự ưu tiên (các từ điển sau này được ưu tiên hơn)

Bạn cũng có thể xâu chuỗi các từ điển theo cách thủ công bên trong phần đọc chính tả

z = x | y          # NOTE: 3.9+ ONLY
99

hoặc bằng Python 2. 6 (và có lẽ sớm nhất là 2. 4 khi các biểu thức trình tạo được giới thiệu)

z = x | y          # NOTE: 3.9+ ONLY
0

Enter hex : A2
Decimal : 162
18 sẽ xâu chuỗi các trình vòng lặp qua các cặp khóa-giá trị theo đúng thứ tự

z = x | y          # NOTE: 3.9+ ONLY
1

Phân tích hiệu suất

Tôi sẽ chỉ thực hiện phân tích hiệu suất của các tập quán được biết là hoạt động chính xác. (Tự chứa để bạn có thể sao chép và dán cho mình. )

z = x | y          # NOTE: 3.9+ ONLY
2

Trong Trăn 3. 8. 1, Nix OS

z = x | y          # NOTE: 3.9+ ONLY
3____34

Tài nguyên về từ điển

  • Giải thích của tôi về triển khai từ điển của Python, được cập nhật cho 3. 6
  • Trả lời về cách thêm khóa mới vào từ điển
  • Ánh xạ hai danh sách vào một từ điển
  • Các tài liệu Python chính thức trên từ điển
  • The Dictionary Even Mightier - nói chuyện bởi Brandon Rhodes tại Pycon 2017
  • Modern Python Dictionaries, A Confluence of Great Ideas - bài nói chuyện của Raymond Hettinger tại Pycon 2017

Python – Cách thực thi chương trình hoặc gọi lệnh hệ thống

Sử dụng mô-đun

Enter hex : A2
Decimal : 162
19 trong thư viện chuẩn

z = x | y          # NOTE: 3.9+ ONLY
5

Ưu điểm của

Enter hex : A2
Decimal : 162
20 so với
Enter hex : A2
Decimal : 162
21 là nó linh hoạt hơn (bạn có thể nhận được
Enter hex : A2
Decimal : 162
22,
Enter hex : A2
Decimal : 162
23, mã trạng thái "thực", xử lý lỗi tốt hơn, v.v. )

Ngay cả tài liệu về

Enter hex : A2
Decimal : 162
21 cũng khuyến nghị sử dụng
Enter hex : A2
Decimal : 162
19 để thay thế

Mô-đun

Enter hex : A2
Decimal : 162
19 cung cấp các phương tiện mạnh mẽ hơn để tạo ra các quy trình mới và truy xuất kết quả của chúng; . Xem phần Thay thế các chức năng cũ hơn bằng mô-đun quy trình con trong tài liệu
Enter hex : A2
Decimal : 162
19 để biết một số công thức hữu ích

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

Vì vậy, các bit còn lại là phần phân số nhị phân - bit đầu tiên có giá trị 0. 5, bit thứ 2 0. 25, số 0 thứ 3. 125 và như vậy. Thêm phần này vào 1 và phần định trị là 1. 53125. Nhân số này với 2 với lũy thừa của số mũ = =2^4 = 16 và bạn nhận được 1. 53125 x 16 = 24. quả sung 5 đến 3 sig

Bạn có thể chuyển đổi chuỗi thành float trong Python không?

Chúng ta có thể chuyển đổi một chuỗi thành float trong Python bằng cách sử dụng hàm float() . Đây là một chức năng tích hợp được sử dụng để chuyển đổi một đối tượng thành một số dấu phẩy động.

Hệ thập lục phân có thể nổi không?

C99 hỗ trợ các số dấu phẩy động có thể được viết ở định dạng thập lục phân . Ở định dạng thập lục phân, số mũ là một số thập phân biểu thị lũy thừa của hai mà phần quan trọng được nhân lên. Do đó 0x1. fp3 = 1. 9375 * 8 = 1. 55e1.

Làm cách nào để chuyển đổi hex thành int trong Python?

Bạn có thể chuyển đổi chuỗi lục giác thành số nguyên trong Python bằng cách sử dụng phương thức literal_eval() của thư viện ast (Cây cú pháp trừu tượng) . Ta phải truyền chuỗi hex cho hàm literal_eval(), không có tham số, hàm chuyển chuỗi hex thành số nguyên.