rol*_*lls 10 c# bytearray bitmask bit-shift char
CI会这样做
int number = 3510;
char upper = number >> 8;
char lower = number && 8;
SendByte(上部);
SendByte(低级);
上下都是= 54
在C#我这样做:
Run Code Online (Sandbox Code Playgroud)int number = Convert.ToInt16("3510"); byte upper = byte(number >> 8); byte lower = byte(number & 8); char upperc = Convert.ToChar(upper); char lowerc = Convert.ToChar(lower); data = "GETDM" + upperc + lowerc; comport.Write(data);
但是在调试器编号= 3510,upper = 13和lower = 0这没有任何意义,如果我将代码更改为>> 6 upper = 54这绝对是奇怪的.
基本上我只想从16位数字中获取上下字节,并在"GETDM"之后将其发送到com端口
我怎样才能做到这一点?它在C语言中非常简单,但在C#中我完全被难倒了.
Jon*_*eet 34
你的屏蔽是不正确的 - 你应该屏蔽255(0xff)而不是8.移位工作的方法是"按位移位",而按位和/或反对该值来屏蔽...所以如果你只想保持最低8位,你需要一个只有底部8位设置的掩码 - 即255.
请注意,如果您尝试将一个数字拆分为两个字节,那么它应该是一个简短的或者用来开始的,而不是一个int(有四个字节).
ushort number = Convert.ToUInt16("3510");
byte upper = (byte) (number >> 8);
byte lower = (byte) (number & 0xff);
Run Code Online (Sandbox Code Playgroud)
请注意,当您不需要担心符号扩展时,我在ushort这里使用而不是byte按位算术更容易思考.在这种情况下,由于缩小转换的方式byte起作用,实际上并不重要,但这是你应该考虑的事情.
你可能想和它一起 0x00FF
byte lower = Convert.ToByte(number & 0x00FF);
Run Code Online (Sandbox Code Playgroud)
完整示例:
ushort number = Convert.ToUInt16("3510");
byte upper = Convert.ToByte(number >> 8);
byte lower = Convert.ToByte(number & 0x00FF);
char upperc = Convert.ToChar(upper);
char lowerc = Convert.ToChar(lower);
data = "GETDM" + upperc + lowerc;
Run Code Online (Sandbox Code Playgroud)