[英]Array of Bytes (as hex) conversion to Int issue. (Kotlin/Java)
我正在查看来自温度/湿度传感器的信息,该信息随附以下说明:
有6个字节。
温度正/负:0表示正(+),1表示负(-)
温度的整数部分。 以十六进制显示。
温度的小数部分。 以十六进制显示。
保留字节。 忽略它。
湿度的整数部分。 以十六进制显示。
湿度的小数部分。 以十六进制显示。
例如:00 14 05 22 32 08表示+ 20.5C 50.8%&01 08 09 00 14 05表示-8.9C 20.5%
因为每个字节都以十六进制表示,所以我需要将其隐式转换为Int,我遵循这种方法-Java代码将字节转换为十六进制,但是在验证其示例时获得的值没有意义。
val example = byteArrayOf(0, 14, 5, 22, 32, 8)
example.map { Integer.parseInt(String.format("%02X ", it),16)}
第一个示例输出为;
0 = "00 "
1 = "08 "
2 = "09 "
3 = "00 "
4 = "0E "
5 = "05 "
第二个示例输出;
0 = "00 "
1 = "0E "
2 = "05 "
3 = "16 "
4 = "20 "
5 = "08 "
我究竟做错了什么? 我开始认为制造商的说明可能会“误导”
这里缺少的关键是,将it
参数传递给String#format
,该值为十进制 int
而不是十六进制 int
。
相反,您希望将数组中的值直接映射到字符串,然后获取其十进制值:
byte it = 14;
int x = Integer.parseInt(String.valueOf(it), 16);
System.out.println(x); // This will print 20
这应该为您带来预期的结果。
注意,您的问题有点令人困惑,因为您的字节数组中的数字是十进制数字...已经以其十六进制“格式”显示。 有几种方法可以解决这种混淆(假设您可以控制数组的类型和/或内容):
String
而不是byte
String it = "14";
int x = Integer.parseInt(it, 16);
System.out.println(x); // This will print 20
0x
) byte it = 0x14;
int x = Integer.parseInt(String.format("%02X", it), 16);
System.out.println(x); // This will print 20
byte it = 0x14;
System.out.println(it); // This will print 20
如果使用第二个项目符号,尽管有些麻烦,但现在应该可以使用,但是如果您要对字节数组的值进行硬编码,则第三个选项是最好的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.