Как преобразовать байты, полученные в порт обратно в строку?

У меня есть такой код, который хранит данные последовательного порта в массиве int named buffer здесь. Теперь я хочу, чтобы этот буфер преобразовал его в строку обратно. Как я могу это сделать?

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);
 //}
 }
2 ответа

Я не уверен в точном решении, поскольку он зависит от устройства, с которым вы общаетесь, но я мог бы предложить следующий подход. Сначала вы читаете байты, тогда вам следует использовать массив байтов вместо целочисленного массива. Тот факт, что вы хотите читать цифры там, не означает, что вы должны использовать целые числа (числа?). Я предполагаю, что у вас должны быть 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 байт, пока вы можете читать меньше символов. Поэтому вам следует, вероятно, пересмотреть код, который читается из порта.


См. Encoding.GetString(). Если массив целых чисел может быть разрешен в массив байтов, и вы знаете кодировку, то вы должны иметь возможность сделать что-то вроде:

Encoding.UTF8.GetString(buffer)

... после преобразования целочисленного массива в массив байтов.

licensed under cc by-sa 3.0 with attribution.