serialPort를 통해 들어오는 데이터가있는 프로그램이 있는데이 데이터를 바이트 배열로 변환 한 다음 각 바이트를 조사합니다. 그러나 예를 들어 6 바이트 (바이트 [0] - 바이트 [5])가 있으며 이는 모두 다양한 것을 의미합니다. 그러나 어떤 이유로 마지막 바이트 (byte [5])는 프로그램에서 0x63을 반환합니다. 포트로 들어오는 데이터를 통해서조차도 다른 것을 말합니다. 문제를 확인하기 위해 범위로 들어오는 데이터를 확인했습니다. 다음은 관련 코드의 일부입니다SerialPort 바이트 배열은 항상 byte [5]에 0x63을 반환합니까?
SerialPort mySerialport = new SerialPort("COM3",9600, Parity.None, 8, StopBits.One);
rxString = mySerialPort.ReadExisting();
byte[] bytes = Encoding.ASCII.GetBytes(rxString);
textbox1.Clear();
if (bytes[0] == 0x12) //Header
{
if (bytes[1] == 0xA6) //Header
{
if (bytes[2] == address) //Address
{
byte A = bytes[3];
byte B = bytes[4];
var checksum = ((address + A + B)^0xFF) & 0xFF;
if (checksum == bytes[5])
{
textbox1.AppendText("Connected OK!!!");
}
else
{
textbox1.AppendText("Byte 5 = " + bytes[5]);
}
}
}
}
그리고 내가 내가 텍스트 상자에 내 계산 체크섬을 표시하는 경우는 범위에 대한 체크섬과 동일, 알이 (바이트 [5]). 따라서 바이트 [5]가 0x63으로 변경되는 코드 어딘가에 있어야합니다.
덕분에, 당신의 도움이 ... 감사합니다
코드가 완전하지 않은 것처럼 보입니다. 예를 들어, mySerialPort'를 실행하고'port'를 열어서 사용하지 마십시오. 또한 닫는 괄호가 빠져 있습니다. 전체 코드 인쇄물을 보여 주면 대개 도움이됩니다. – Guss
죄송합니다. 부적절하다고 느낀로드를 가져 왔습니다. – Graham
63은 0x63과 달리 마법의 숫자이며, '?'에 대한 ASCII 코드입니다. 바이트 값> = 0x80을 변환해야하는 경우 ASCIIEncoding 클래스에 의해 생성됩니다. SerialPort.Encoding 속성의 기본값입니다. ReadExisting()을 사용하여 이진 데이터를 읽지 마십시오. 대신 Read() 메서드를 사용하십시오. 반환 값을 무시하지 마십시오. –