afaik atleast in C there's no "safe" way to do it. The method presented by @e
works in most situations, but breaks strict aliasing (a poiner of one type may
not be casted to a pointer of an incompatible type).
The usual safer way, in C is by using a union:
type
Uint8ToFloat64 {.union.} = object
f: float64
i: array[8, uint8]
proc floatToInts(f: float64): array[8, uint8] =
var convert: Uint8ToFloat64
convert.f = f
convert.i
proc intsToFloat(i: array[8, uint8]): float64 =
var convert: Uint8ToFloat64
convert.i = i
convert.f
doAssert intsToFloat(floatToInts(-42.0)) == -42.0
Run