占有四个字节整数,安全的换算,不管大端和小端都能换算。

项目场景:

今天做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:代表二进制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值