我有一个设备,我有一些用户在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);
我需要的是低= 47和高= 02。
哪个给lower = 0
和upper = 247
..我可能知道我做错了什么
答案 0 :(得分:1)
它可以为lower = 0
提供upper = 247
和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
,我们需要在正确的8位中加入2。这给出00101111 00000010
二进制,等于12034十进制。
不确定您要实现的目标,但是您提供的代码Rx = 12034
是唯一可能使上限和下限等于您的需求。因此,如果这不适合您的协议,那么您在其他地方犯了错误。