想要在 Java 中将 32 位 IEEE 字符串转换为十进制。

Want to convert a 32 bit IEEE String to decimal in Java.

我正在尝试将 32 位字符串转换为十进制...

示例: “00111111100000000000000000000000” > 1 和 “01000001101000000000000000000000” > 20

我正在尝试下面的代码,但我得到的结果是完全错误的。 “00111111100000000000000000000000” > 2147483647

    String s = "00111111100000000000000000000000"
    float fl = Float.parseFloat(s);
    int bits = Math.round(Math.abs(fl));
    decTextView.setText(Long.toString(bits));

有什么建议吗?

32位数字作为String在做的时候可以解析成整数

String s = "00111111100000000000000000000000";
int myInt= Integer.parseInt(s, 2);

尝试解析与 float 相同的字符串会破坏转换,因为 float

被定义为 sign + exponent + mantissa 这与 2 complement signed int

完全不同

你需要做三件事。

  • 读取字符串中的 0 和 1 作为 int
  • 使用 intBitsToFloatint 转换为 float
  • float 转换为小数 (BigDecimal)。

.

int bits = Integer.parseInt(s,2);
float value = Float.intBitsToFloat(bits);
BigDecimal asDecimal = BigDecimal.valueOf(value);