1、大小端转换
例如一个4字节的十六进制数表示为0x12 34 56 78,若它在内存中的形式是0x78 56 34 12。那么,当我们从内存中读取这个数后,读出来的是0x78 56 34 12,如果拿着个数去计算换算的话,就会出错,所以,首先需要对这个数进行大小端转换,转换后的数为0x12 34 56 78。
此处附上大小端转换的代码:
//大小端转换
void _API_BYTEHL(void* pLVOID, int iLen)
{
if (nullptr == pLVOID || 0 >= iLen)
return;
byte *ucTmArr;
ucTmArr = new byte[iLen];
//将plvoid指针的内容倒序写入uctmarr
for (int i = 0; i < iLen; i++)
{
*(ucTmArr + i) = *((byte*)pLVOID - i + iLen - 1);
}
memcpy((byte*)pLVOID, ucTmArr, iLen);
delete ucTmArr;
}
调用方式:
quint8 *cmd = (quint8 *)malloc(3);
memset(cmd, 0xAA, 3);
memcpy(cmd, &cmd_code, 2);
_API_BYTEHL(cmd, sizeof(quint16));//大小端转换