将整形数转换为byte数组的一点疑问

chenzhp 2019-01-18 03:12:15
    void translateInBuff(byte[] pInputBuf, int tOffset,int tInputU32) {
pInputBuf[tOffset]=(byte)(tInputU32);
pInputBuf[tOffset+1]=(byte)(((tInputU32)&0x0000ff00)>>8);
pInputBuf[tOffset+2]=(byte)(((tInputU32)&0x00ff0000)>>16);
pInputBuf[tOffset+3]=(byte)(((tInputU32)&0xff000000)>>24);
}

通过这个函数,在java里面可以将一个int形数据放入byte数组里面

比如我传入一个 25117
函数调用后
byte[] pTempArray=new byte[4];
int tTempRet;
translateInBuff(pTempArray,0,25117);

pTempArray这个byte的数组里面存放的就是 0x621d 刚好就是10进制的25117

函数内部大概原理我了解:
void translateInBuff(byte[] pInputBuf, int tOffset,int tInputU32) {
pInputBuf[tOffset]=(byte)(tInputU32); //这里直接截断,留下了低8位
//这里有点迷糊,我自己换算成2进制,然后按照ff00按位与,然后右移了8位,的确就是之前整形的另外8位。
//那么,为什么用0x0000ff来与呢,而不是 0x0000ee或者0x0000dd来与呢。。

pInputBuf[tOffset+1]=(byte)(((tInputU32)&0x0000ff00)>>8);
pInputBuf[tOffset+2]=(byte)(((tInputU32)&0x00ff0000)>>16);
pInputBuf[tOffset+3]=(byte)(((tInputU32)&0xff000000)>>24);
}
...全文
197 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
CT8100 2019-01-18
  • 打赏
  • 举报
回复
与ff数据本质不会变化。。。。你要是与ee数据就变了
liangxin509 2019-01-18
  • 打赏
  • 举报
回复
ff就是8位呀,11111111八位

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧