2017-10-11 16 views
-2

내 코드를 실행할 때 무게가 바뀌면 제대로 작동합니다. 그러나 문제는 내 텍스트 상자에 01B가 표시된다는 것입니다. code.i 잘못이 0546처럼 사람이 읽을 수있는 형식의 int로서 원하는 것을 얻을 좀 도와주세요 등저는 beginner에서 net programming.i가 저울과 연결되기 시작합니다. 내 텍스트 상자에 숫자가 나타납니다.

당신은 소수에 진수 가져온 무게를 변환 할 필요가
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, 이것은 무엇입니까, 16 진수? 버퍼의 실제 문자열 값이기 때문에 – Ferus7

+0

003은 16 진수 값입니다./ – 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

여기서 lane ?? – Ferus7

+0

int dec = int.Parse (str, System.Globalization.NumberStyles.HexNumber); 이 줄에 – Trump