如何在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条答案
按热度按时间krcsximq1#
用十六进制表示的有符号短(16位)值表示十分之一度的温度:
如果需要,可以在格式字符串中添加“0x”。-反向转换:
这表示2的补码中的整数,因此-54.9的结果将不是0x8225而是0xfddb。使用最高有效位作为符号位并表示剩余15位中的绝对值(“有符号幅度”)是非常不寻常的,尤其是在java中。
如果要使用有符号幅值:
vfh0ocws2#
试试下面的代码“please notice tohexstring()”中的想法