0

我有一个设备,我有一些用户在 GUI 中设置的值,就像630 330等等。我需要将这些值传递给 I2C 字节。583 将02 47是十六进制位。这将在 2 字节变量中,我需要调用Set(byte lower ,byte upper)以便将 int 或 double 值转换为 2 字节是要求。

我试过了 :

            ushort R1x = (ushort)Rx;
            byte upper = (byte)(R1x >> 8);
            byte lower = (byte)(R1x & 0xff);

我需要的是lower = 47和upper = 02。

这是给予lower = 0upper = 247..我可以知道我做错了什么

4

1 回答 1

1

它可以给你lower = 0upper = 247for Rx = 247,因为ushort它是一个 16 位的值,247适合 8 位。这就是为什么高 8 位为零(不需要保存 247)而低位保存整数,即 247 或00000000 11110111二进制。

第一个将为您提供非零高位的数字是 256 ( 00000001 00000000),其中:

upper = 1
lower = 0

为了让upper = 47你需要反转这个过程,所以让我们把它写成一个 8 位二进制数:00101111. 然后将这 8 位作为 16 位数字的高位:00101111 00000000. 既然你想要lower = 2我们需要把 2 放在正确的 8 位中。这给出了00101111 00000010等于十进制 12034 的二进制。

不确定您要达到什么目标,但是对于您提供的代码Rx = 12034,唯一的可能是让上限和下限等于您想要的。因此,如果这不适合您的协议,那么您在其他地方犯了错误。

于 2013-10-24T11:28:51.393 回答