我必须以二进制格式发送数据,并且还必须以二进制格式接收另一端。我已从串口发送数据,但不知道如何将二进制数据发送到串口。这是将8位二进制数据/字节写入串口的正确方法。请任何人帮忙。提前谢谢。
port = new SerialPort("COM1", 19200, Parity.None, 8, StopBits.One);
port.DtrEnable = true;
port.RtsEnable = true;
port.Handshake = Handshake.RequestToSend;
port.ReadTimeout = 6000;
port.WriteTimeout = 5000;
port.Open();
byte[] b={0,1,1,0,1,1,1,0,1};
port.Write(b, 0, 8);
答案 0 :(得分:1)
所以问题是你只能发送字节而不是位。 如果是这样,你应该做的是将你的位加到一个字节:
0110 1101 = 0x6D
现在你这样做:
byte[] b;
b[0] = 0x6D;
port.Write(b, 0, b.Length);
在接收端,您读取一个字节,并使用位掩码获取单个位;
bool bit0 = read_byte & 0x01;
bool bit1 = read_byte & 0x02;
bool bit2 = read_byte & 0x04;
bool bit3 = read_byte & 0x08;
bool bit4 = read_byte & 0x10;
bool bit5 = read_byte & 0x20;
bool bit6 = read_byte & 0x40;
bool bit7 = read_byte & 0x80;
如果你想要一个数组,你也可以用循环来做这个。
答案 1 :(得分:0)
是的,这有效。您可以发送所需的任何原始二进制值。而且,而不是写;
byte[] b={0,1,1,0,1,1,1,0,1};
port.Write(b, 0, 8);
你可以简单地写
byte[] b={0,1,1,0,1,1,1,0,1};
port.Write(b, 0, b.Length);
答案 2 :(得分:0)
如果需要8个位,请不要创建8个字节。正确的方法是创建一个由您的8位组成的byte
,通过串行端口发送,然后在另一侧使用&
和>>
来接收该位值,可以是1或0,当然。
在发件人方面;
byte[] b = new byte[1];
b[0] = 0x12; //your byte "00010010" here.
port.Write(b, 0, b.Length);
在猎犬方面;
// lower nibble
int bit0 = receivedByte & 0x01;
int bit1 = (receivedByte & 0x02) >> 1;
int bit2 = (receivedByte & 0x04) >> 2;
int bit3 = (receivedByte & 0x08) >> 3;
// higher nibble
int bit4 = (receivedByte & 0x10) >> 4;
// etc.