Hướng dẫn how do you convert hex to floating in python? - làm cách nào để bạn chuyển đổi hex thành float trong python?

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 how do you convert hex to floating in python? - làm cách nào để bạn chuyển đổi hex thành float trong python?

Mskfisher

3.2444 Huy hiệu vàng33 Huy hiệu bạc48 Huy hiệu đồng4 gold badges33 silver badges48 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.50414 Huy hiệu bạc26 Huy hiệu đồng14 silver badges26 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 how do you convert hex to floating in python? - làm cách nào để bạn chuyển đổi hex thành float trong python?

Denis Otkidachdenis OtkidachDenis Otkidach

31.1k8 Huy hiệu vàng76 Huy hiệu bạc98 Huy hiệu Đồng8 gold badges76 silver badges98 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

Phim thương hiệu vàng 180K6666 gold badges209 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 how do you convert hex to floating in python? - làm cách nào để bạn chuyển đổi hex thành float trong python?

John La Rooyjohn La RooyJohn La Rooy

288K51 Huy hiệu vàng359 Huy hiệu bạc501 Huy hiệu đồng51 gold badges359 silver badges501 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

830K165 Huy hiệu vàng1205 Huy hiệu bạc1385 Huy hiệu Đồng165 gold badges1205 silver badges1385 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 how do you convert hex to floating in python? - làm cách nào để bạn chuyển đổi hex thành float trong python?

TclltcllTcll

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

0

Mã python cho float là gì?

Float () trả về giá trị dựa trên giá trị đối số hoặc tham số đang được truyền cho nó.Nếu không có giá trị hoặc tham số trống được truyền, nó sẽ trả về các giá trị 0,0 dưới dạng đầu ra điểm nổi.Giá trị phao Python được biểu diễn dưới dạng giá trị chính xác kép 64 bit. returns the value based on the argument or parameter value that is being passed to it. If no value or blank parameter is passed, it will return the values 0.0 as the floating-point output. Python float values are represented as 64-bit double-precision values.

Chuỗi có thể được chuyển đổi thành float không?

Chúng ta có thể chuyển đổi chuỗi thành float trong java bằng phương thức float.parseFloat (). parseFloat() method.

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.

Python có tự động chuyển đổi int thành float không?

Số nguyên và số điểm nổi có thể được trộn trong số học.Python 3 tự động chuyển đổi số nguyên thành phao khi cần thiết.Python 3 automatically converts integers to floats as needed.