シリアルポートを使用して私の "GS#"文字列を返すデバイスを接続しました。長い検査の後、私は問題が スイッチの状態であることをほとんど確信しています。つまり、私のプログラムは決してケースに入りませんし、常にデフォルトになります。受け取った文字列をテキストボックスに印刷したところ、 ":GS#"でした!私は混乱しています。私のミスはどこですか?文字列型のswitch文を書くには?
は、ここに私のコードです:
それはあなたが読み取りバイトを保存するあなたのchar
配列は8文字の長さコメントで指摘されたとおり
char[] lxCMD = new char[8];
.
.
.
private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
serialPort.Read(lxCMD, 0, lxCMD.Length);
this.Invoke(new EventHandler(UpdateVar));
}
private void UpdateVar(object sender, EventArgs e)
{
string strRecieved = "Ack";
if (lxCMD[0] != 0x6)
{
strRecieved = new string(lxCMD);
}
textBox1.AppendText(strRecieved); // This line prints :GS# correctly!
textBox1.AppendText(Environment.NewLine);
switch(strRecieved)
{
case ":GS#":
serialPort.Write("20:08:18#");
textBox1.AppendText("1:");
textBox1.AppendText(Environment.NewLine);
break;
case "Ack":
serialPort.Write("1");
textBox1.AppendText("2:");
textBox1.AppendText(Environment.NewLine);
break;
default:
textBox1.AppendText("Nothing");
break;
}
}
あなたの文字列に制御文字が追加されていますか?多分あなたはそれを切る前に消毒するべきです。 –
文字列の最後にスペースや印字不能な文字がありますか?あなたの 'char []'が8文字であれば、文字列もその長さになる可能性があります。 –
GS#を正確に受け取っていないかぎり、それがうまくいかない理由はありません。文字列の長さのように、印刷されていない文字をチェックしてください。 –