第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

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

如題如題如題

正在回答

6 回答

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

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

Juneava 提問者

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

源碼里已經(jīng)進行了&0xff操作

0 回復(fù) 有任何疑惑可以回復(fù)我~

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

0 回復(fù) 有任何疑惑可以回復(fù)我~

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

出0ffffffa之類的了


2 回復(fù) 有任何疑惑可以回復(fù)我~

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

0 回復(fù) 有任何疑惑可以回復(fù)我~

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

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

Juneava 提問者

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

舉報

0/150
提交
取消

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

我要回答 關(guān)注問題
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號