如何在Python中将以下十六进制字符串转换为float(单精度32位)?
"41973333" -> 1.88999996185302734375E1
"41995C29" -> 1.91700000762939453125E1
"470FC614" -> 3.6806078125E4
Run Code Online (Sandbox Code Playgroud) 如何在Java中将十六进制字符串转换为单精度浮点?
例如,如何实现:
float f = HexStringToFloat("BF800000"); // f现在应该包含-1.0
我问这个因为我试过了:
float f = (float)(-1.0);
String s = String.format("%08x", Float.floatToRawIntBits(f));
f = Float.intBitsToFloat(Integer.valueOf(s,16).intValue());
Run Code Online (Sandbox Code Playgroud)
但我得到以下异常:
java.lang.NumberFormatException:对于输入字符串:"bf800000"
是否存在字节序列,当转换为f32或者f64在Rust中产生未定义的行为时?我将非有限值(例如NaN,Infinity等)计为有效浮点值.
对此答案的评论暗示可能存在从原始字节转换浮点数的问题.
我正在使用一个hex!只接受字符串文字的宏。我有一个从函数返回并存储在变量中的值。我无法对值进行硬编码并调用此函数。那么,如何hex!使用变量调用宏?
这是我的工作代码:
let account: AccountId32 = hex_literal::hex!["d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d"].into();
Run Code Online (Sandbox Code Playgroud)
这是我面临错误的代码:
let account_id = "d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d";
let account: AccountId32 = hex_literal::hex!(&account_id).into();
Run Code Online (Sandbox Code Playgroud)
错误是:
let account: AccountId32 = hex_literal::hex!["d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d"].into();
Run Code Online (Sandbox Code Playgroud)
hex!宏的所有示例仅使用字符串文字来演示它。
基于以下问题:
我尝试过以下代码:
fn main() {
// Hex string to 8 bytes, aka. u64
let bytes = u64::from_str_radix("c51981cb", 16).unwrap();
// Reinterpret 8 bytes as f64:
let float = unsafe { std::mem::transmute::<u64, f64>(bytes) };
println!("float: {}", float);
}
Run Code Online (Sandbox Code Playgroud)
这可以编译并运行,但根据https://www.h-schmidt.net/FloatConverter/IEEE754.html,答案应该是 -2456.11206055,而不是我得到的 0.000.... 数字。
我的 BE/LE 有问题吗?或者我犯了其他错误?