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

如何在java中将十进制值转换为十六进制?,java,hex,decimal,data-conversion,Java,Hex,Decimal,Data Conversion,如何在java中将十进制值(温度)转换为16位十六进制 输入:-54.9 预期结果:0x8225 我有相反的代码,我把16字节的十六进制转换成十进制值(温度) 尝试下面代码中的想法“请注意toHexString()” 用十六进制表示的有符号短(16位)值表示十分之一度的温度: static String toHex( float t ){ short it = (short)Math.round(t*10); return String.format( "%04x", it );

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

输入:-54.9

预期结果:0x8225

我有相反的代码,我把16字节的十六进制转换成十进制值(温度)

尝试下面代码中的想法“请注意toHexString()”


用十六进制表示的有符号短(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;
}
这表示2的补码中的整数,因此-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;
}
静态字符串到十六进制(浮点t){
int符号=0;
if(t<0){
符号=0x8000;
t=-t;
}
short it=(short)(数学四舍五入(t*10)+符号);
返回String.format(“%04x”,it);
}
静态浮点toDec(字符串s){
int it=Integer.parseInt(s,16);
如果(它>32767){
it=-(it-0x8000);
}
返回/10.0F;
}

首先是个好主意,在stackoverflow中搜索它database@Stultuske在这里,我们应该使用Java提供的东西,所以这个特定的链接没有帮助。我认为这行不通,因为我需要将-25.5这样的值转换为十六进制。@laune:我编辑了它。但是我应该在哪里传递我需要转换的值?使用扫描仪控制台将要求您输入一个值,然后您可以指定如果double then double num=input.nextDouble();,将采用什么类型@user3624028,然后整数.toHexString(num)将执行。。。什么?Integer.toHexString(num)方法将返回int的十六进制字符串表示形式,您也可以将其分配给double类型,例如:
double d=new double(“4.0”);String str=d.tohextstring(1.0);System.out.println(“十六进制字符串=“+str”)@launa:这对我没用。我通过输入f:-54.9,但预期结果:0x8225,但我得到的结果是fbbd。请阅读我写的内容。你坚持这种不寻常的表示吗?@AnkitKesarwani我已经添加了符号震级的方法。@laune:更新的解决方案对我有用。非常感谢劳恩。:)
static float toDec( String s ){
    int it = Integer.parseInt( s, 16 );
    if( it > 32767 ) it -= 65536;
    return it/10.0F;
}
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;
}