首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解LSB和MSB

理解LSB和MSB
EN

Software Engineering用户
提问于 2018-01-26 17:35:25
回答 1查看 4.4K关注 0票数 3

关于一个接口控制文档,我发现很难理解这个概念。有一个具有LSB为0.0625和MSB为2048的参数应该从一台设备传输到另一台设备。范围是0到2400。

这应仅用一个字传送。那是两个字节。

现在的问题是:我理解这个参数是由一个分辨率为0.0625的测量系统测量的。由于它是十进制数,我们如何使用纯整数的2个字节来传递这个连续的范围参数(2字节的无符号范围是0到65535)?

这个参数是速度,它是由INS-GPS航空电子系统测量的,并且仅用两个字节就被传送到CPU。

我该怎么理解呢?

如何将连续十进制参数表示为离散整数参数?

EN

回答 1

Software Engineering用户

发布于 2018-01-27 15:42:00

TL;DR:

以下函数将执行从物理值到16位代码的转换:

代码语言:javascript
复制
short valueToCode(double value) {
    return round(16.0 * value);
}

长解释

一个无符号的16位值有16位(当然),最左边的是MSB (最重要的位),最右边的是LSB (最不重要的位)。

读取为普通整数,LSB位置中的1位占值1,MSB位置中的1位占32768。

在您的例子中,16位数字表示分数部分的数字,一个LSB代表0.0625 (= 1/16),MSB代表2048年(= 32768/16)。这是一致的,这意味着你总是通过把16位代码除以16来得到小数,或者,如果你想找到最接近某个分数值的代码,那么乘以16,然后取最接近的整数。

一些示例(给出您想要实现的值、最接近该值的代码以及有效值):

代码语言:javascript
复制
Desired       Code (dec + bin)          Resulting Value
    0.0625      1 = 0000000000000001       0.0625  (the LSB case)
    0.1         2 = 0000000000000010       0.125
    1.0        16 = 0000000000010000       1.0
   20.5       328 = 0000000101001000      20.5
 2048.0     32768 = 1000000000000000    2048.0    (the MSB case)
票数 11
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/364740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档