Преобразование данных QByteArray в строку ascii

Код в основном предназначен для преобразования соответствующих данных в соответствии с таблицей ascii.

typedef struct {
  char cmd;
  QString data;
} cmdList_t; /* 该结构体可以精简掉 直接用QStringList也可以处理 */

static cmdList_t cmdList[] = {
    {0x00, QString("NULL")}, {0x01, QString("SOH")}, {0x02, QString("STX")},
    {0x03, QString("ETX")},  {0x04, QString("EOT")}, {0x05, QString("ENQ")},
    {0x06, QString("ACK")},  {0x07, QString("BEL")}, {0x08, QString("BS")},
    {0x09, QString("HT")},   {0x0A, QString("LF")},  {0x0B, QString("VT")},
    {0x0C, QString("FF")},   {0x0D, QString("CR")},  {0x0E, QString("SO")},
    {0x0F, QString("SI")},   {0x10, QString("DLE")}, {0x11, QString("DC1")},
    {0x12, QString("DC2")},  {0x13, QString("DC3")}, {0x14, QString("DC4")},
    {0x15, QString("NAK")},  {0x16, QString("SYN")}, {0x17, QString("ETB")},
    {0x18, QString("CAN")},  {0x19, QString("EM")},  {0x1A, QString("SUB")},
    {0x1B, QString("ESC")},  {0x1C, QString("FS")},  {0x1D, QString("GS")},
    {0x1E, QString("RS")},   {0x1F, QString("US")},  {0x20, QString(" ")},
    {0x7F, QString("DEL")}};

/* 将QByteArray数据转对应的ascii数据 返回QString */
QString smallerShare::getAsciiByArray(QByteArray &data) {
  uint16_t len = data.length();
  QString sRet;
  if (len == 0) {
    return sRet;
  }
  QString tmp;
  for (uint16_t cnt = 0; cnt < len; cnt++) {
    if (0x00 > data.at(cnt))
      continue;
    if (0x20 < data.at(cnt) && 0x7E >= data.at(cnt)) {
      tmp.clear();
      sRet += QString::asprintf("%c", data.at(cnt));
    } else {
      if (0x7F == data[cnt]) {
        sRet += cmdList[32].data;
      } else if (0x20 >= data.at(cnt)) {
        sRet += cmdList[(int)data.at(cnt)].data;
      } else {
        continue;
      }
    }
  }

  return sRet;
}

Пример последовательного порта выглядит следующим образом:

Guess you like

Origin blog.csdn.net/u011624093/article/details/117423547