有一个16进制字符串,请问如何转换为float类型的值?
如有:43B48000   41180000   48A74680 三个字符串

解决方案 »

  1.   

    DWORD a = ::strtoul(str,0,16);
    float b = (float)a;
      

  2.   

    int StrLen = YourStr.length;
    Char SubChar;
    int Rst=0;
    for (int i=0;i<StrLen;i++)
    {
        SubChar=YourStr.subString(i);
        if (SubChar>='0' && SubChar<='9')
        {
            Rst+=(SubChar-48)*(i*16);
        }
        else if(SubChar>='A' && SubChar<='F')
        {
            Rst+=(SubChar-55)*(i*16);
        }
        else if(SubChar>='a' && SubChar<='f')
        {
            Rst+=(SubChar-87)*(i*16);
        }
        else
        {
            Rst=0;  //如查非法字符
            break;
         }
    }
    return Rst; //没有测过,由ASCII码算的,不对的话,自己改改。
      

  3.   

    搞定了~
    public static void toFloat(String s) {
         int intBits = Integer.parseInt(s, 16);
         float f = Float.intBitsToFloat(intBits);
         System.out.println(f);
        }double的:
    public static void toDouble(String s) {
         long longBits = Long.parseLong(s, 16);
         double d = Double.longBitsToDouble(longBits);
         System.out.println(d);
        }
      

  4.   

    上面的两个解法都没有考虑小数部分: public static Float parseFloatHex(String hexString) {
    // 如果解析出错,则抛出异常
    String[] slit = hexString.split("[.]");
    float f = 0;
    if (slit.length > 2) {
    throw new IllegalArgumentException("");
    }
    if (slit[0].length() > 0) { //如果含有整数部分
    f += Integer.parseInt(slit[0], 16);
    }
    if(slit.length == 2) {
    int div = 1;
    for (int i = 0; i < slit[1].length(); i++) {
    div *= 16;
    }
    f += Integer.parseInt(slit[1], 16) * 1.0 / div;

    }
    return f;
    }
      

  5.   

    zephyr_cc的正解, 
    其他的可能都没明白怎么回事,这是一个float的16进制存储的问题