这个问题可能看起来很傻,但请指导我
我有一个将长数据转换为字符数组的函数
void ConvertLongToChar(char *pSrc, char *pDest)
{
pDest[0] = pSrc[0];
pDest[1] = pSrc[1];
pDest[2] = pSrc[2];
pDest[3] = pSrc[3];
}
我这样调用上面的函数
long lTemp = (long) (fRxPower * 1000);
ConvertLongToChar ((char *)&lTemp, pBuffer);
效果很好。
我需要一个类似的函数来反转该过程。将 char 数组转换为 long。
我无法使用 atol 或类似的功能。
将字节序与其他函数匹配的负担留给您,这是一种方法:
unsigned long int l = pdest[0] | (pdest[1] << 8) | (pdest[2] << 16) | (pdest[3] << 24);
为了安全起见,这是相应的其他方向:
unsigned char pdest[4];
unsigned long int l;
pdest[0] = l & 0xFF;
pdest[1] = (l >> 8) & 0xFF;
pdest[2] = (l >> 16) & 0xFF;
pdest[3] = (l >> 24) & 0xFF;
从char[4]
长和背是完全可逆的;从长到char[4]
对于 2^32-1 以内的值,后退是可逆的。
请注意,所有这些仅适用于无符号类型。
(我的例子是little如果你读过的话pdest
从左到右。)
附录:我也假设CHAR_BIT == 8
。一般来说,用 8 的倍数代替CHAR_BIT
在代码中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)