2014-01-29 80 views
0

我有一些像這樣的代碼,它將串行端口數據存儲到int命名緩衝區數組中 現在我想讓該緩衝區將其轉換回字符串。我怎樣才能做到這一點?如何將接收到的字節轉換回字符串?

private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) 
    { 
     //if (cCommon.DecryptText(CallerId) == "enable") 
     //{ 
     if (buffer.Length > 0) 
     { 
      try 
      { 
       for (int c = 0; c != serialPort.BytesToRead; c++) 
       { 
        buffer[pointer] = serialPort.ReadByte(); 
        pointer++; 
       } 
      } 
      catch (TimeoutException x) 
      { 
       //BackgroundWorker bw = new BackgroundWorker(); 



       bw = new BackgroundWorker(); 
       bw.DoWork += new DoWorkEventHandler(bw_DoWork); 
       bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted); 
       bw.RunWorkerAsync(); 
      } 
     } 
     // } 
     //else 
     //{ 
     // MessageBox.Show("You do not have permission to use This feature serialPort", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     //} 
    } 
+3

首先爲什麼使用int數組?字節數組不應該更好地服務?你有沒有嘗試搜索一下?例如,這樣的東西可以幫助http://stackoverflow.com/questions/11654562/how-convert-byte-array-to-string或http://stackoverflow.com/questions/1003275/converting-byte-to-string -in-c-sharp –

+0

您在代碼中缺少右括號。 – Max

+0

你爲什麼使用int數組? – Idov

回答

1

請參閱Encoding.GetString()。如果你的整數數組可以解析爲字節數組,你知道的編碼,那麼你應該能夠做到像:

Encoding.UTF8.GetString(buffer) 

...整數數組轉換成字節數組後。

1

我不確定確切的解決方案,因爲它取決於您正在與之通信的設備,但我可以建議採用以下方法。首先你正在讀取字節,那麼你應該使用字節數組而不是整數數組。你想讀數字的事實並不意味着你應該使用整數(數字?)。我猜你應該有ASCII字符,所以你應該使用這種轉換,但這是你應該看到的。

byte[] buffer = new byte[255]; 
private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) 
{ 
     try 
     { 
     for (int c = 0; pointer+c < buffer.Length && c < serialPort.BytesToRead; c++) 
     { 
      buffer[pointer++] = (byte)serialPort.ReadByte(); 
     } 
     } 
     catch 
     { 
      MessageBox.Show("Error reading port!"); 
     } 
} 
. 
. 
. 
//and then you convert what you have read with something like this: 

System.Text.Encoding.ASCII.GetString(buffer); 

但是,請記住,您正在轉換整個255個字節,而您可能讀取的字符較少。因此,您應該修改從端口讀取的代碼。

+0

我需要知道它的編碼類型嗎? – NoviceToDotNet

+0

正如我所說,它可能是ASCII,可能表現得像一個調制解調器,但你應該檢查反正。另外,請考慮@ Sinatr的評論。他指出了很好的方向。 –

+0

我改變了代碼與我的確切代碼..would請再次看到它我努力了很久..我想讀取數字..我想使它的概括解決方案來電如果可以是任何東西.. – NoviceToDotNet