Float.intBitsToFloat(Integer.parseInt("C1C8FDF3",16));此方法已经用过 报错  只能转换int最大值以下

解决方案 »

  1.   

    跟你提供一个工具类
    package com.pan.exe;import java.awt.BorderLayout;
    import java.awt.GridLayout;
    import java.awt.Rectangle;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    public class JInZhi { private JFrame f = new JFrame("Number JInZhi");
    private JPanel p = new JPanel();
    private JTextField decimal = new JTextField();
    private JTextField binary = new JTextField();
    private JTextField octal = new JTextField();
    private JTextField hex = new JTextField();
    private JLabel decimalLable = new JLabel("输入的数字");
    private JLabel binaryLable = new JLabel("二进制");
    private JLabel octalLable = new JLabel("八进制 ");
    private JLabel hexLable = new JLabel("十六进制");
    private JButton transfer = new JButton("转化");

    public JInZhi(){

    p.setLayout(new GridLayout(4, 2));
    p.add(decimalLable);
    p.add(decimal);
    p.add(binaryLable);
    p.add(binary);
    p.add(octalLable);
    p.add(octal);
    p.add(hexLable);
    p.add(hex);

    binary.setEditable(false);
    octal.setEditable(false);
    hex.setEditable(false);

    transfer.addMouseListener(new TransferListener());

    f.setBounds(new Rectangle(400, 150, 500, 400));
    f.add(p, BorderLayout.NORTH);
    f.add(transfer, BorderLayout.SOUTH);

    f.setVisible(true);
    f.pack();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    private class TransferListener implements MouseListener{ public void mouseClicked(MouseEvent e) {
    if(decimal.getText() == null || decimal.getText().trim().equals("")){
    JOptionPane.showMessageDialog(null, "Value to transfer is empty!");
    return;
    }

    int number = 0;
    try{
    number = Integer.parseInt(decimal.getText());
    }catch(NumberFormatException exp){
    JOptionPane.showMessageDialog(null, "Incorrect format for the number to transfer, must be numbers");
    return;
    }

    binary.setText(Integer.toBinaryString(number));
    octal.setText(Integer.toOctalString(number));
    hex.setText(Integer.toHexString(number));
    } public void mouseEntered(MouseEvent e) {}
    public void mouseExited(MouseEvent e) {}
    public void mousePressed(MouseEvent e) {}
    public void mouseReleased(MouseEvent e) {}
    }

    public static void main(String[] args) {
    new JInZhi();
    }}
      

  2.   


    package com.together.test;/**
     * @date PM 16:36 2011-12-18
     * @author sunleisoft
     * @desc 转换工具类
     * @re 参考developer5和
     *  wangfeiwoyun的代码
     * 
     */
    public class Test1 { public static void main(String[] args) { /* 用十六进制的"C1C8FDF3",转成一个十进制整数(这个十进制数并不是浮点数): */
    String str = "C1C8FDF3";
    StringBuffer buff = new StringBuffer();
    int i;
    for (i = 0; i < str.length(); i++) {
    buff.append(getBin(str.substring(i, i + 1)));
    }
    /* 然后用这个十进制整数得到一个二进制字符串: */
    // 结果就是:11000001110010001111110111110011
    String binaryString = buff.toString();
    System.out.println(binaryString);
    System.out.println(binaryStringToFloat(binaryString));
    } 楼主能否追加点分数,也好激励我下次再回答你的问题.分数好少啊. private static String[] hexs = new String[] { "0", "1", "2", "3", "4", "5",
    "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
    private static String[] bins = new String[] { "0000", "0001", "0010",
    "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010",
    "1011", "1100", "1101", "1110", "1111" }; // 返回十六进制数的二进制形式
    private static String getBin(String hex) {
    int i;
    for (i = 0; i < hexs.length && !hex.toLowerCase().equals(hexs[i]); i++)
    ;
    return bins[i];
    } // 这里只处理规格化数,非规格化数,NaN,finite等没有考虑
    static float binaryStringToFloat(final String binaryString) {
    // float是32位,将这个binaryString左边补0补足32位,如果是Double补足64位。
    final String stringValue = leftPad(binaryString, '0', 32); // 首位是符号部分,占1位。
    // 如果符号位是0则代表正数,1代表负数
    final int sign = stringValue.charAt(0) == '0' ? 1 : -1; // 第2到9位是指数部分,float占8位,double占11位。
    final String exponentStr = stringValue.substring(1, 9); // 将这个二进制字符串转成整数,由于指数部分加了偏移量(float偏移量是127,double是1023)
    // 所以实际值要减去127
    final int exponent = Integer.parseInt(exponentStr, 2) - 127; // 最后的23位是尾数部分,由于规格化数,小数点左边隐含一个1,现在加上
    final String mantissaStr = "1".concat(stringValue.substring(9, 32));
    // 这里用double,尽量保持精度,最好用BigDecimal,这里只是方便计算所以用double
    double mantissa = 0.0; for (int i = 0; i < mantissaStr.length(); i++) {
    final int intValue = Character.getNumericValue(mantissaStr
    .charAt(i));
    // 计算小数部分,具体请查阅二进制小数转10进制数相关资料
    mantissa += (intValue * Math.pow(2, -i));
    }
    // 根据IEEE 754 标准计算:符号位 * 2的指数次方 * 尾数部分
    return (float) (sign * Math.pow(2, exponent) * mantissa);
    } // 一个简单的补齐方法,很简单,没考虑很周到。具体请参考common-long.jar/StringUtils.leftPad()
    static String leftPad(final String str, final char padChar, int length) {
    final int repeat = length - str.length(); if (repeat <= 0) {
    return str;
    } final char[] buf = new char[repeat];
    for (int i = 0; i < buf.length; i++) {
    buf[i] = padChar;
    }
    return new String(buf).concat(str);
    }
    /**
     * @desc 位序颠倒
     * @param source
     * @return
     */
    static String reverse8BitsHexString(final String source) {
    final int length = source.length(); final char[] result = new char[length]; for (int i = length - 1; i > 0; i = i - 2) {
    result[length - i - 1] = source.charAt(i - 1);
    result[length - i] = source.charAt(i);
    } return new String(result);
    }}