如何在Java中将十进制值转换为十六进制?

时间:2015-01-15 11:01:56

标签: java hex decimal data-conversion

如何在java中将十进制值(温度)转换为16位十六进制?

输入:-54.9

预期结果:0x8225

我有反向代码,我将16字节十六进制转换为十进制值(温度)。

private static double hexDataToTemperature(String tempHexData) {

    String tempMSBstr = tempHexData.substring(0, 2);
    String tempLSBstr = tempHexData.substring(2, 4);

    int tempMSB = Integer.parseInt(tempMSBstr, 16);
    int tempLSB = Integer.parseInt(tempLSBstr, 16);
    int sign = 1;

    if (tempMSB >= 128) {
        tempMSB = tempMSB - 128;
        sign = -1;
    }

    Float f = (float) (sign * ((float) ((tempMSB * 256) + tempLSB) / 10));

    return Double.parseDouble("" + f);

}

2 个答案:

答案 0 :(得分:0)

以十六进制表示温度,以十六进制表示的有符号短(16位)值表示:

static String toHex( float t ){
    short it = (short)Math.round(t*10);
    return String.format( "%04x", it );
}

您可以添加" 0x"如果你想要格式字符串。 - 反向转换:

static float toDec( String s ){
    int it = Integer.parseInt( s, 16 );
    if( it > 32767 ) it -= 65536;
    return it/10.0F;
}

这表示二进制补码中的整数,因此-54.9的结果为0x8225而是0xfddb。使用最高有效位作为符号位并在剩余的15位中表示绝对值("带符号幅度")是非常不寻常的,特别是对于Java。

如果您确实想使用签名幅度:

static String toHex( float t ){
    int sign = 0;
    if( t < 0 ){
        sign = 0x8000;
        t = -t;
    }
    short it = (short)(Math.round(t*10) + sign);
    return String.format( "%04x", it );
}

static float toDec( String s ){
    int it = Integer.parseInt( s, 16 );
    if( it > 32767 ){
        it = -(it - 0x8000);
    }
    return it/10.0F;
}

答案 1 :(得分:-1)

尝试使用此代码中的Idea&#34;请注意到HESString()&#34;

import java.util.Scanner;
    class DecimalToHex
    {
        public static void main(String args[])
        {
          Scanner input = new Scanner( System.in );
          System.out.print(" decimal number : ");
          int num =input.nextInt();

          // calling method toHexString()
          String str = Integer.toHexString(num);
          System.out.println("Decimal to hexadecimal: "+str);
        }
    }