亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

都說printHexByByteArray方法里面buf[i]要加一個&0xff,否則會輸出0ffffffa之類的字符,那么為什么第一個方法printHex里面的b不需要就能輸出正確呢

如題如題如題

正在回答

6 回答

簡單點說,原來開辟空間之后輸入的buf是Byte型,只有8位。現在要用Integer.toHexString把int型轉化成字符型,這個函數括號里輸入的一定要是int型也就是32位;為了不發生錯誤,就先用位與&把Byte型(只有8位)前面的24位全都變成0(比如:byte數據1011 1011&1111 1111 1111 1111....,按位運算,高位不足補0,1&1=1,1&0=0,0&0=0)。打個比方就是:8個乒乓球(byte數據)放到長度為32的筒狀盒子(Integer)里,為了讓這8個球不亂晃并且剛好貼近開口方便拿(可以正確讀?。桶训撞?4個長度用廢報紙(與0xff得到的高24位)塞上。有或者沒有&0xff看具體用什么數據類型,不是都要加的,“與ff”是數據存儲時把短數據變成長數據的常用做法。

0 回復 有任何疑惑可以回復我~
#1

Juneava 提問者

非常感謝!
2017-04-06 回復 有任何疑惑可以回復我~

源碼里已經進行了&0xff操作

0 回復 有任何疑惑可以回復我~

你肯定之前的沒看懂,老實說read讀取低8位,其余為補0,用Integer.toHexString()方法就不會輸出前面的0;相反去過在不知道其位的情況下,需要&0xff手動將其余位清零。具體的你需要知道在計算機中任何數字都以反碼存放,去了解相關知識吧。

0 回復 有任何疑惑可以回復我~

方法printHex是無符號讀取,所有的字節前面都是加24個零,這樣就不會出現

出0ffffffa之類的了


2 回復 有任何疑惑可以回復我~

貌似那里放的是byte還是什么類型。一個byte就是8位(8bit),一個8位的長度所以就能放完。但是int類型占用的是4個字節,每個字節是8位,一共32位,所以要放4次,每次放8位。

0 回復 有任何疑惑可以回復我~

因為第一個里面的放置的都是用8位就能表示完的數或者什么的,沒必要這樣做了。建議去看看微機原理,進制和數據表示。

0 回復 有任何疑惑可以回復我~
#1

Juneava 提問者

怎么看出來第一個里面的放置的都是用8位就能表示完的數?
2016-10-30 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

都說printHexByByteArray方法里面buf[i]要加一個&0xff,否則會輸出0ffffffa之類的字符,那么為什么第一個方法printHex里面的b不需要就能輸出正確呢

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號