场景
十六进制数据直接保存到文件:
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;
}
}