java - 大端十六进制数对话
问题描述
我有以下 4 个字节的十六进制字符串(38 01 02 00),预期的输出是(201.38)十进制,就像第一个输入相反。如果给出 ( 89 00 00 00 ),那么预期结果将是 ( 0.89 )
我不知道这次对话的数学名称。
- 我尝试将 Big-endian 转换为 little-endian,但结果以 (00020138) 失败。
- 我试过写一个简单的方法,但结果仍然是错误的(1492992770)
int htonl(final int value) {
return ByteBuffer
.allocate(4)
.putInt(value).order(ByteOrder.nativeOrder())
.getInt(0);
}
解决方案
它似乎是 BCD 编码(Binary Coded Decimal),其中每个 4 字节组代表一个小数位。
并且字节顺序是小端 - 它从最低有效字节开始。
我所看到的都表明小数点位于固定位置,但这只是一个猜测。
所以,你第一次尝试的结果很接近。只需将其除以 100,就完成了。
推荐阅读
- python - AttributeError:'function'对象没有属性'read'
- node.js - 无法从我的 VS Code 扩展 (node.js) 连接到 SQL Server
- c++ - 错误 2552:无法使用初始化列表初始化非聚合
- python - 如何使大小为 [64, 3, 128, 128] 和 [64, 64, 127, 127] 的两个张量的维度相等
- python - 字典的长度不一样
- python - zero-mq如何获取队列容量和负载
- java - java.lang.NoClassDefFoundError: com/codename1/ui/ComponentSelector
- visual-studio-code - VSCode:用en-和em破折号替换多个连字符
- node.js - Deploy Nodejs + ReactJs to Heroku
- objective-c - 如何在没有 Interface Builder 的情况下将 UIButton 对象的中心约束到其父视图