#floating-point #julia
Вопрос:
У меня есть массив байтов в Джулии:
a = [0x41,0x40,0x00,0x00]
который представляет собой 32-разрядное байтовое представление десятичного числа 12.0 с плавающей запятой.
32-разрядное представление IEEE 754 12.0 равно «0x41400000».
У меня есть два вопроса:
- Как я могу преобразовать этот массив
a
в число Float32 12.0 ? - Обратный : Как я могу преобразовать это число Float32 12.0 в массив байтов [0x41,0x40,0x00,0x00] ?
Я пробовал reinterpret(Float32,[12.0])
и reinterpret(UInt32,[12.0])
. Никакого успеха.
Ответ №1:
Число 12.0
-это а Float64
, которое вы не должны смешивать с этим. 12f0
является Float32
версией этого. Похоже, вы делаете что-то немного в обратном направлении.
Вот как вы переосмысливаете 12f0
байты:
jlgt; a = reinterpret(UInt8, [12f0]) 4-element reinterpret(UInt8, ::Vector{Float32}): 0x00 0x00 0x40 0x41
(Обратите внимание, что у вас в массиве был обратный порядок байтов a
.) А вот и другой путь:
jlgt; reinterpret(Float32, a) 1-element Vector{Float32}: 12.0
или
jlgt; reinterpret(Float32, [0x00, 0x00, 0x40, 0x41]) 1-element reinterpret(Float32, ::Vector{UInt8}): 12.0
Печать 12f0
as 12.0
немного неудачна, так как это неправильный литерал, но, по крайней мере, тег типа понятен.