项目场景:
今天做Android jni层开发,遇到一个代码一直没看懂,后面请教嵌入式开发人员,才基本弄懂,做个记录
问题描述:
这个函数可以得到,占有四个字节的int型大小,不管是大端还是小端,大端小端我也没彻底弄明白,大概是arm是大端,x86是小端,两个恰好相反,所以如果强行转换的话有可能就转换的数据不对。通过以下函数就没这个问题。
/******************************************************************************
Function : package_get_length
Description: get package length
Input : data
Output : none
Return : length of a package.
******************************************************************************/
unsigned int TLV::package_get_length(unsigned char *data) noexcept
{
return static_cast<unsigned int>(data[1] << 24 | data[2] << 16 | data[3] << 8 | data[4]);
}
原因分析:
解决方案:
比如说四个字节的位置依次是4534,其实每个字节范围是0-255,所以最后一个字节不用位移,倒数第二个字节左移8位,倒数第三个左移16位,依次类推,最后做或运算,就是相当于把他们拼起来。
HEX :代表16进制,DEC:代表10进制, OCT:代表8进制,BIN:代表二进制