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

chenzhp chenzhp 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
    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);
}
...全文

相关推荐

评论 2
收藏 已收藏
分享
返回顶部
chenzhp
C语言 70,039 成员 243,237 内容