2014-09-21 39 views
0

我必須以二進制格式發送數據,也必須以二進制格式接收另一端。我已經從串口發送數據,但不知道如何將二進制數據發送到串口。這是8位二進制數據/字節寫入串口的正確方法。請大家幫忙。提前致謝。如何發送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); 
+2

'byte's不是位。 – SLaks 2014-09-21 15:55:13

回答

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); 
+0

這是錯誤的。 OP明確要求將單個字節寫入串行端口。你用8個字節聲明一個byte []。這與聲明包含8位的「byte」不同。 – 2014-09-21 16:36:05

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; 

如果你想要一個數組,你也可以用循環來做到這一點。

+0

可以üPLZ解釋任何一行獲取位接收端代碼和接收端代碼是字節特定的代碼? – mano 2014-09-21 20:35:53

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. 
+0

謝謝,但我實際上已經將字符串轉換爲字節,並且在字節[0]的開始處是什麼是0b。 – mano 2014-09-21 18:35:47

+0

你能給一個字符串的例子嗎?是不是像「01011010」? 0b表示二進制表示,對於十六進制表示也如此。在快速查找後,我發現C#不支持這一點,我將編輯代碼。 – 2014-09-21 18:40:43

+0

好的。是的,我的字符串是:「01011010」。 – mano 2014-09-21 18:45:42