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

时间:2017-01-31 18:44:10

标签: java decimal ieee

我正在尝试将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));

有任何建议吗?

2 个答案:

答案 0 :(得分:1)

32位数字作为字符串可以在执行

时解析为整数
String s = "00111111100000000000000000000000";
int myInt= Integer.parseInt(s, 2);

尝试解析与float相同的字符串将破坏自浮动后的转换

被定义为 sign + exponent + mantissa ,这是一个完全不同的表示形式,而不是2补充符号int

答案 1 :(得分:0)

你需要做三件事。

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

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