2017-10-11 34 views
-2

當我執行我的代碼時,它的權重變化時正常工作。但問題是我的文本框顯示01B等。請大家幫我得到了什麼錯在code.i希望它在人類可讀的格式INT像0546等等我是初學者,網絡編程。我開始連接體重秤並在我的文本框中獲得刻度數字

if (InvokeRequired)  //<-- Makes sure the function is invoked to work properly in the UI-Thread 
    BeginInvoke(new Closure(() => { SerialPortOnDataReceived(sender, serialDataReceivedEventArgs); }));  //<-- Function invokes itself 
else 
{ 
    while (_serialPort.BytesToRead > 0) //<-- repeats until the In-Buffer is empty 
    { 
     int dataLength = _serialPort.BytesToRead; 
     byte[] data = new byte[dataLength]; 
     int nbrDataRead = _serialPort.Read(data, 0, dataLength); 
     if (nbrDataRead == 0) 
      return; 
     string str = System.Text.Encoding.UTF8.GetString(data); 
     textBox1.Text = str.ToString(); 

    } 
} 
+0

04C,03N,03D,04F,這是什麼,十六進制?因爲是你的緩衝區的真實字符串值 – Ferus7

+0

003是十六進制值:/ – Trump

+0

你需要檢查你需要哪種格式並轉換值,你不要告訴我們你需要的格式類型 – Ferus7

回答

0

您需要在十六進制取重量轉換成十進制:

string str = GetValidNumber(System.Text.Encoding.UTF8.GetString(data)); 
int dec = int.Parse(str, System.Globalization.NumberStyles.HexNumber); 
textBox1.Text = dec.ToString() + "kg"; 

您需要檢查字符串中的有效ASCII字符,以便使用此方法:

public string GetValidNumber(String numberToValid) 
    { 
     string validNumber = ""; 
     bool isValidChar = false; 

     try 
     { 
      for (int i = 0; i < numberToValid.Length; i++) 
      { 
       isValidChar = CheckAsciiChar(numberToValid[i].ToString()); 

       if (isValidChar) 
        validNumber += numberToValid[i]; 
      } 
      return validNumber; 
     } 
     catch (Exception ex){}    
    } 

    private bool CheckAsciiChar(string c) 
    { 
     bool isValid = false; 
     try 
     { 
      byte[] asciiBytes = Encoding.ASCII.GetBytes(c); 

      for (int i = 48; i <= 57; i++) 
      { 
       if (asciiBytes[0] == i) 
        isValid = true; 
      } 

      for (int i = 65; i <= 90; i++) 
      { 
       if (asciiBytes[0] == i) 
        isValid = true; 
      } 

      for (int i = 97; i <= 122; i++) 
      { 
       if (asciiBytes[0] == i) 
        isValid = true; 
      } 

      if (asciiBytes[0] == 250) 
       isValid = true; 

      return isValid; 
     } 
     catch (Exception ex){}    
    } 
+0

它的顯示異常消息輸入字符串格式不正確 – Trump

+0

在哪個通道? – Ferus7

+0

int dec = int.Parse(str,System.Globalization.NumberStyles.HexNumber);在這一行中 – Trump

相關問題