转换为低位和高位

时间:2013-10-24 11:02:51

标签: c# byte

我有一个设备,我有一些用户在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 = 0upper = 247 ..我可能知道我做错了什么

1 个答案:

答案 0 :(得分:1)

它可以为lower = 0提供upper = 247Rx = 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是唯一可能使上限和下限等于您的需求。因此,如果这不适合您的协议,那么您在其他地方犯了错误。