# fhex `fhex` is a Rust crate that provides the `ToHex` trait for converting floating-point numbers to their hexadecimal representation. The trait is implemented for `f32` and `f64` types. The hexadecimal representation follows the format specified for the IEEE 754 standard, `±0xh.hhhp±d`, described below. To parse hexadecimal floating point numbers, see the [hexf](https://crates.io/crates/hexf) crate. ## Usage Add `fhex` to your `Cargo.toml` dependencies: ```toml [dependencies] fhex = "1.0.0" ``` Then, import the `ToHex` trait in your code: ```rust use fhex::ToHex; ``` You can now call the `to_hex` method on any `f32` or `f64` value: ```rust let num: f32 = 1.23; let hex = num.to_hex(); println!("{}", hex); ``` This will print the hexadecimal representation of 1.23. ``` 0x1.3ae148p+0 ``` ## Format Floating point numbers are represented in the format: `±0xh.hhhp±d`, where: * `±` is the sign of the number, although `+` is omitted for positive numbers. * `0x` is the prefix for hexadecimal numbers. * `h.hhh` is the significand (also known as the mantissa), represented as a hexadecimal number. * `p` indicates that the following number is the exponent. * `±d` is the exponent, represented as a decimal number. Special cases: * `±0x0p+0` is used to represent zero. * `±inf` is used to represent infinity. * `nan` is used to represent NaN (a "quiet NaN"). * `nan:0x` followed by a hexadecimal number is used to represent a NaN with a payload (a "signalling NaN"). ### Known differences with other implementations * Go's `%x` format specifier for floating point numbers uses the format `±0xh.hhhp±d`, but it insists on printing the exponent with at least two digits, zero padded. Infinity is represented as `±Inf` and NaN as `NaN`. There is no special treatment of signalling NaNs. * C++'s `std::hexfloat` format specifier for floating point numbers uses the format `±0xh.hhhp±d`. There is no special treatment of signalling NaNs, they are just `nan`. ## License This project is licensed under the Apache License 2.0 - see the [LICENSE](./LICENSE) file for details.