场景

     十六进制数据直接保存到文件:

55 aa 02 01 a0 01 06 fc 55 aa 03 bc a3 01 16 01  

   如何转换成十进制重新保存


代码

int ChangeHEXToDEC(char cByte)
{
  int nNumber = 0;
  switch (cByte)
  {
  case '0':
  {
    nNumber = 0;
    break;
  }
  case '1':
  {
    nNumber = 1;
    break;
  }
  case '2':
  {
    nNumber = 2;
    break;
  }
  case '3':
  {
    nNumber = 3;
    break;
  }
  case '4':
  {
    nNumber = 4;
    break;
  }
  case '5':
  {
    nNumber = 5;
    break;
  }
  case '6':
  {
    nNumber = 6;
    break;
  }
  case '7':
  {
    nNumber = 7;
    break;
  }
  case '8':
  {
    nNumber = 8;
    break;
  }
  case '9':
  {
    nNumber = 9;
    break;
  }
  case 'A':
  case 'a':
  {
    nNumber = 10;
    break;
  }
  case 'B':
  case 'b':
  {
    nNumber = 11;
    break;
  }
  case 'C':
  case 'c':
  {
    nNumber = 12;
    break;
  }
  case 'D':
  case 'd':
  {
    nNumber = 13;
    break;
  }
  case 'E':
  case 'e':
  {
    nNumber = 14;
    break;
  }
  case 'F':
  case 'f':
  {
    nNumber = 15;
    break;
  }
  default:
  {
    nNumber = 0;
    break;
  }
  }
  return nNumber;
}

    int nFirstNumber = ChangeHEXToDEC(pFileBuf[0]);
    int nSecondNumber = ChangeHEXToDEC(pFileBuf[1]);
    char cRealByte = nFirstNumber * 16 + nSecondNumber;

void TestRecvVideoData()
{
  std::ifstream  fileHandle("E:/my.rtp", std::ifstream::in | std::ifstream::binary);
  fileHandle.seekg(0, std::ios::end);
  int nFileLen = fileHandle.tellg();
  fileHandle.seekg(0, std::ios::beg);

  int nLen = nFileLen;
  std::string strFileBuffer;
  int i = 0;
  while (nLen > 2)
  {
    char* pFileBuf = new char[20];
    memset(pFileBuf, 0x0, 20);
    //3的原因是每两个字节后面都有一个空格
    //如果类似4108011A3D696D6,3需要调整为2
    fileHandle.read(pFileBuf, 3);

    int nFirstNumber = ChangeHEXToDEC(pFileBuf[0]);
    int nSecondNumber = ChangeHEXToDEC(pFileBuf[1]);
    char cRealByte = nFirstNumber * 16 + nSecondNumber;
    strFileBuffer.append(&cRealByte, 1);
    nLen = nLen - 2;
    i = i + 2;
  }
}