Hướng dẫn python convert hex to float - python chuyển đổi hex thành float

47

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Làm thế nào để chuyển đổi chuỗi hex sau thành float (chính xác 32 bit) trong Python?

"41973333" -> 1.88999996185302734375E1

"41995C29" -> 1.91700000762939453125E1

"470FC614" -> 3.6806078125E4

Hướng dẫn python convert hex to float - python chuyển đổi hex thành float

Mskfisher

3.2254 Huy hiệu vàng33 Huy hiệu bạc47 Huy hiệu đồng4 gold badges33 silver badges47 bronze badges

Hỏi ngày 20 tháng 10 năm 2009 lúc 2:32Oct 20, 2009 at 2:32

Trong Python 3:Python 3:

>>> import struct
>>> struct.unpack('!f', bytes.fromhex('41973333'))[0]
18.899999618530273
>>> struct.unpack('!f', bytes.fromhex('41995C29'))[0]
19.170000076293945
>>> struct.unpack('!f', bytes.fromhex('470FC614'))[0]
36806.078125

Trong Python 2:Python 2:

>>> import struct
>>> struct.unpack('!f', '41973333'.decode('hex'))[0]
18.899999618530273
>>> struct.unpack('!f', '41995C29'.decode('hex'))[0]
19.170000076293945
>>> struct.unpack('!f', '470FC614'.decode('hex'))[0]
36806.078125

tay vịn

1.48712 Huy hiệu bạc24 Huy hiệu đồng12 silver badges24 bronze badges

Đã trả lời ngày 20 tháng 10 năm 2009 lúc 4:00Oct 20, 2009 at 4:00

Hướng dẫn python convert hex to float - python chuyển đổi hex thành float

Denis Otkidachdenis OtkidachDenis Otkidach

31.1k8 Huy hiệu vàng75 Huy hiệu bạc97 Huy hiệu Đồng8 gold badges75 silver badges97 bronze badges

5

Tôi khuyên bạn nên sử dụng mô -đun CTYPES về cơ bản cho phép bạn làm việc với các loại dữ liệu cấp thấp. Trong trường hợp của bạn, bạn có thể nói

from ctypes import *

def convert(s):
    i = int(s, 16)                   # convert from hex to a Python int
    cp = pointer(c_int(i))           # make this into a c integer
    fp = cast(cp, POINTER(c_float))  # cast the int pointer to a float pointer
    return fp.contents.value         # dereference the pointer, get the float

print convert("41973333")    # returns 1.88999996185302734375E1

print convert("41995C29")    # returns 1.91700000762939453125E1

print convert("470FC614")    # returns 3.6806078125E4

Tôi tin rằng mô-đun

>>> import struct
>>> struct.unpack('!f', bytes.fromhex('41973333'))[0]
18.899999618530273
>>> struct.unpack('!f', bytes.fromhex('41995C29'))[0]
19.170000076293945
>>> struct.unpack('!f', bytes.fromhex('470FC614'))[0]
36806.078125
1 có ý nghĩa ở đây, bởi vì về cơ bản bạn đang hỏi làm thế nào để thực hiện đúc bit cấp thấp. Câu hỏi của bạn về cơ bản là làm thế nào để tôi nói với Python lấy một số dữ liệu và giải thích dữ liệu đó như thể những bit chính xác đó là một loại dữ liệu khác nhau?

Trong C Nếu bạn có INT và muốn giải thích các bit của nó như một chiếc phao, bạn sẽ làm điều tương tự, lấy một con trỏ và sau đó đúc và phá hủy nó:

int i = 0x41973333;
float f = *((float*)&i);

Và đó chính xác là những gì mã Python sử dụng thư viện

>>> import struct
>>> struct.unpack('!f', bytes.fromhex('41973333'))[0]
18.899999618530273
>>> struct.unpack('!f', bytes.fromhex('41995C29'))[0]
19.170000076293945
>>> struct.unpack('!f', bytes.fromhex('470FC614'))[0]
36806.078125
1 đang làm trong ví dụ của tôi.

Đã trả lời ngày 20 tháng 10 năm 2009 lúc 2:49Oct 20, 2009 at 2:49

Eli Courtwrighteli CourtwrightEli Courtwright

179K66 Huy hiệu vàng208 Huy hiệu bạc256 Huy hiệu Đồng66 gold badges208 silver badges256 bronze badges

1

Tôi đoán câu hỏi này liên quan đến câu hỏi này và bạn đang làm việc với 4 byte thay vì 8 chữ số hex.

>>> import struct
>>> struct.unpack('!f', bytes.fromhex('41973333'))[0]
18.899999618530273
>>> struct.unpack('!f', bytes.fromhex('41995C29'))[0]
19.170000076293945
>>> struct.unpack('!f', bytes.fromhex('470FC614'))[0]
36806.078125
3 là chuỗi 4 byte mặc dù nó trông giống như 16

>>> len("\x41\x91\x33\x33")
4
>>> import struct  
>>> struct.unpack(">fff","\x41\x97\x33\x33\x41\x99\x5C\x29\x47\x0F\xC6\x14")
(18.899999618530273, 19.170000076293945, 36806.078125)

Nếu bạn cần phải đối phó với chuỗi hexDigits chứ không phải là byte thực tế, bạn có thể sử dụng

>>> import struct
>>> struct.unpack('!f', bytes.fromhex('41973333'))[0]
18.899999618530273
>>> struct.unpack('!f', bytes.fromhex('41995C29'))[0]
19.170000076293945
>>> struct.unpack('!f', bytes.fromhex('470FC614'))[0]
36806.078125
4 để chuyển đổi nó, như thế này

>>> for hx in ["41973333","41995C29","470FC614"]:
...     print(struct.unpack(">f",struct.pack(">i",int(hx,16)))[0])
... 
18.8999996185
19.1700000763
36806.078125

Đã trả lời ngày 20 tháng 10 năm 2009 lúc 2:37Oct 20, 2009 at 2:37

Hướng dẫn python convert hex to float - python chuyển đổi hex thành float

John La Rooyjohn La RooyJohn La Rooy

286K51 Huy hiệu vàng359 Huy hiệu bạc499 Huy hiệu đồng51 gold badges359 silver badges499 bronze badges

Cắt các chuỗi hex thành các khối 2 ký tự (byte), làm cho mỗi đoạn vào byte bên phải với định dạng int, struct.unpack khi thực hiện. I E.:

import struct 

testcases = {
"41973333": 1.88999996185302734375E1,
"41995C29": 1.91700000762939453125E1,
"470FC614": 3.6806078125E4,
}

def hex2float(s):
    bins = ''.join(chr(int(s[x:x+2], 16)) for x in range(0, len(s), 2))
    return struct.unpack('>f', bins)[0]

for s in testcases:
  print hex2float(s), testcases[s]

phát ra, như mong muốn:

18.8999996185 18.8999996185
19.1700000763 19.1700000763
36806.078125 36806.078125

Đã trả lời ngày 20 tháng 10 năm 2009 lúc 2:58Oct 20, 2009 at 2:58

Alex Martellialex MartelliAlex Martelli

826K163 Huy hiệu vàng1203 Huy hiệu bạc1382 Huy hiệu Đồng163 gold badges1203 silver badges1382 bronze badges

Khi làm việc từ chuỗi và không phải cắt các giá trị hoặc chỉ mục.

import struct
...
q = int('0x425c0000',16)
b8 = struct.pack('i', q)
dec, = struct.unpack('f', b8)

Đã trả lời ngày 3 tháng 4 năm 2021 lúc 21:05Apr 3, 2021 at 21:05

Gentelmen ... kìa:

>>> import struct
>>> struct.unpack('!f', bytes.fromhex('41973333'))[0]
18.899999618530273
>>> struct.unpack('!f', bytes.fromhex('41995C29'))[0]
19.170000076293945
>>> struct.unpack('!f', bytes.fromhex('470FC614'))[0]
36806.078125
0

Xin lỗi vì một chút ".value" ở cuối ... mã này đã được sử dụng làm lớp trong chương trình của tôi trong gần 2 năm nay. (Với một chút chỉnh sửa, bạn có thể dễ dàng biến nó thành một chức năng)
this code has been used as a class in my program for nearly 2 years now.
(with a little editing, you can easily make it into a function)

Tín dụng cho Pytony tại Daniweb cho Bộ luật.

Không giống như điện toán không di động, mã không cứng với kích thước phao cố định và hoạt động với bất kỳ kích thước byte nào.
the code is not hard-wired to a fixed float size,
and works with any byte-size.

Mặc dù tôi đoán chúng ta vẫn còn một vài lỗi để làm việc. XDD (tôi sẽ chỉnh sửa mã này sau (nếu tôi có thể) với bản cập nhật)
(I'll edit this code later (if I can) with the update)

Tất cả đều tốt mặc dù bây giờ ... Tôi không gặp vấn đề gì khi chuyển đổi các mô hình trò chơi 3D với nó. :)
I havn't had a problem converting 3D game models with it. :)

Đã trả lời ngày 7 tháng 2 năm 2014 lúc 2:10Feb 7, 2014 at 2:10

Hướng dẫn python convert hex to float - python chuyển đổi hex thành float

TclltcllTcll

6,9361 Huy hiệu vàng19 Huy hiệu bạc22 Huy hiệu đồng1 gold badge19 silver badges22 bronze badges

0

Làm thế nào để bạn chuyển đổi hex thành nổi trong Python?

Phương thức hex () 'được sử dụng để chuyển đổi số dấu phẩy động thành giá trị thập lục phân của nó. Tương tự, chúng ta có thể sử dụng 'Float. Phương thức FromHex () 'để chuyển đổi giá trị chuỗi thập lục phân sang điểm nổi. 'hex ()' là một phương thức thể hiện nhưng 'fromHex ()' là một phương thức lớp.. Similarly, we can use 'float. fromhex()' method to convert a hexadecimal string value to floating-point. 'hex()' is an instance method but 'fromhex()' is a class method.

Làm thế nào để bạn chuyển đổi để nổi trong Python?

Chuyển đổi các loại số..
Phương thức của Python Float () sẽ chuyển đổi số nguyên thành phao.Để sử dụng hàm này, thêm một số nguyên bên trong dấu ngoặc đơn:.
Trong trường hợp này, 57 sẽ được chuyển đổi thành 57.0 ..
Bạn cũng có thể sử dụng điều này với một biến.....
Bằng cách sử dụng hàm float (), chúng ta có thể chuyển đổi số nguyên thành phao ..

Python có thể chuyển đổi hex thành thập phân?

Phương pháp 1: Chuyển đổi thập lục phân sang thập phân trong python bằng int () hàm python int () này có thể được sử dụng để thực hiện nhiệm vụ cụ thể này, thêm một đối sốSố nguyên cùng một lúc.using int() This Python int() function can be used to perform this particular task, adding an argument (16) this function can convert a hexadecimal string number to base sixteen and convert it into an integer at the same time.

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

Chúng ta có thể chuyển đổi một chuỗi thành float trong python bằ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 số điểm nổi.. This is a built-in function used to convert an object to a floating point number.