【问题标题】:Temperature Conversion- 2's complement - 13bit温度转换 - 2 的补码 - 13 位
【发布时间】:2012-08-28 04:16:31
【问题描述】:

我没有时间尝试将下表转换为 c# 中的一些有价值的东西。

我有一个 2 字节数组,例如

byte[] data = new byte[2];

data [ 0 ] = 0x00;
data [ 1 ] = 0xc9;

有没有人有办法将下面的图表转换为c#方法?

格式为 DS2438 智能电池监控 IC - http://datasheets.maxim-ic.com/en/ds/DS2438.pdf

注意:底部 3 位始终为 0,因此不应成为公式的一部分并被排除在外。

该值乘以 0.03125 得到最终温度。

所以例子是 0xc900 等于 -1760 或 -1760 * 0.03125 = -55C

感谢任何帮助。

【问题讨论】:

    标签: c# temperature


    【解决方案1】:

    看起来只是(float)(sbyte)data[1] + (float)data[0] / 256

    它是 13 位而不是 16 位并不重要;因为 Dallas 对事物进行了位移,以制作一个不错的 8.8 定点表示。如果您的传感器具有更高的分辨率,则将使用那些低位,但数学仍然完全相同。

    【讨论】:

    • 不 - 这是不正确的,您的结果会产生 0.78515625 的温度,但它应该是 -1760,因为您将其乘以 0.03125
    • 有两个错误;这会产生 -55.0 的结果,正确答案是 -55.0。我认为您的字节顺序错误。
    • 换个方式尝试索引,哪个字节是MSB数据[0]或数据[1]
    • 你写问题的方式,这个答案是正确的
    • 你是对的 - 如此简单的事情让我难倒了好几个小时。
    猜你喜欢
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    相关资源
    最近更新 更多