JAVA中关于float浮点数转换为IEEE754标准4字节16进制数据转换方式

关于解析的具体写法是从一篇文章中摘取下来的
原文url:https://blog.csdn.net/mhl29/article/details/51406834

具体代码:
public class TestMain {

public static void main(String[] args) {
    Float f = 11.4f;

    String s = floatToIEEE754(f);

    System.out.println(s);

    //将返回的二进制字符串 根据每8位进行分组转换为16进制数据

// 01000001=41
// 00110110=36
// 01100110=66
// 01100110=66

}

/**
 * 获取float的IEEE754存储格式
 * @param value
 * @return
 */
public static String floatToIEEE754(float value) {
    //符号位
    String sflag = value > 0 ? "0" : "1";

    //整数部分
    int fz = (int) Math.floor(value);
    //整数部分二进制
    String fzb = Integer.toBinaryString(fz);
    //小数部分,格式: 0.02
    String valueStr = String.valueOf(value);
    String fxStr = "0" + valueStr.substring(valueStr.indexOf("."));
    float fx = Float.parseFloat(fxStr);
    //小数部分二进制
    String fxb = toBin(fx);

    //指数位
    String e = Integer.toBinaryString(127 + fzb.length() - 1);
    //尾数位
    String m = fzb.substring(1) + fxb;

    String result = sflag + e + m;

    while (result.length() < 32) {
        result += "0";
    }
    if (result.length() > 32) {
        result = result.substring(0, 32);
    }
    return result;
}

private static String toBin(float f) {
    List<Integer> list = new ArrayList<Integer>();
    Set<Float> set = new HashSet<Float>();
    int MAX = 24; // 最多8位

    int bits = 0;
    while (true) {
        f = calc(f, set, list);
        bits++;
        if (f == -1 || bits >= MAX)
            break;
    }
    String result = "";
    for (Integer i : list) {
        result += i;
    }
    return result;
}

private static float calc(float f, Set<Float> set, List<Integer> list) {
    if (f == 0 || set.contains(f))
        return -1;
    float t = f * 2;
    if (t >= 1) {
        list.add(1);
        return t - 1;
    } else {
        list.add(0);
        return t;
    }
}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值