16進制顯示字撙節技能分享。本站提示廣大學習愛好者:(16進制顯示字撙節技能分享)文章只能為提供參考,不一定能成為您想要的結果。以下是16進制顯示字撙節技能分享正文
用UE的人都邑認為16進制顯示文件灰常便利。為啥捏?當你要對文件加密、轉碼、編碼的時刻,蹦出一堆01二進制看著都邑頭年夜。究竟十六進制顯示文件冗長便利。至多中考高考時塗過卡吧,1+2+4+8能算明確是幾吧。固然,那些中考和高考都能把1248碼都塗錯的童鞋們,一看就曉得它們武斷與法式猿這個“神剩”的職業無緣哈……
由於之前試著加入過科普立異年夜賽,其時做的咚咚是把文件以字撙節讀入,並轉化成二進制、四進制、十六進制字符串,然後刷的一會兒輸入到掌握台。再依據每一個位的值,分離以2色、4色、16色的矩陣顯示。寫這個的目標是為了用攝像頭辨認,然後再復原成字撙節寫到文件裡。這個法式設計是兩個蛋疼的現實雜交出的產品——1.請求欠亨過任何介質和USB裝備傳輸文件;2.zxing和QRCode有時會找不到二維碼(QRCode更輕易失足)。年夜家可以嘗嘗這個標題,用攝像頭或許揚聲器發送吸收文件,看誰傳得快,標題確切蠻成心思的呢。
固然,最主要的部門是進制轉化了,讀入文件的字撙節byte 8位,用兩個16進制顯示。由於能夠會碰到byte轉int後為補碼的情形,所以最好先同一成負數,辦法其實很簡略啦,一個與運算就弄定!
int result = bytes&0xff;
別小視這個語句,其實這個語句很成心思的。細心想一想,為神馬加了個0xff就釀成負數呢?0xff每一個位都是1,那與運算不就等於沒變更麼?哼哼,之前還真有人這麼問過我,假如真有如許的成績,那就是java基本不穩固了。byte的規模是-128~127,不是0~255,所以嘛,像byte b= -42;如許的賦值確定不克不及用byte b= 214;來替換了。
弄出這個,轉成N進制字符串就不是啥難事了。細心想一想,是否是有個熟習而又生疏的類直接就帶這個功效呢?沒錯,就是用Integer來完成!然則先別急,用它之前,還得對這個int弄點小舉措。
( bytes & 0xff ) + 0x100
曉得這是為何?這個就是+256啊,只是為了看得直不雅些,就是後面加上一名。由於你獲得的int轉成String的話極可能只要一個位,也就是byte轉16進制時丟了一名,那全部法式豈不就全錯位了?平安起見,照樣先同一成三位吧。
你可以嘗嘗這個看看一切byte變16進制後的輸入
public static void main(String[] args) {
for (int i = -128; i < 128; i++) {
byte b=(byte)i;
System.out.println( Integer.toString( ( b & 0xff ), 16));
}
}
看到這裡,你會不會想:你怎樣這麼笨呢?for輪回裡的int為何不改成byte,不就省了一行代碼了麼,多年夜的廉價啊!可以呀,你嘗嘗呗,橫豎我是不會去試的……
所以,最初把byte轉化成二位16進制的代碼是
Integer.toString( ( bytes & 0xff ) + 0x100, 16).substring( 1 );
關於2進制,4進制,8進制,都是一個事理,我就不舉例了。一句代碼就完成了,很奇異吧……
接上去就是用矩陣晶格一幀幀顯示文件,用攝像頭拍下辨認色彩,再轉換會字符串,並反應個色彩讓對方曉得辨認完了好換下一張圖……如斯輪回,直到矩陣晶格顯示文件曾經停止。這部門代碼我就不貼出來了,全部進程可以靠豐碩的想象力YY出來吧……
然後是字符串轉回字撙節,這就是簡略活了
(byte)Integer.parseInt(string, 16)
連位運算都不消,直接就出成果,把它們放到字節數組裡,用FileOutputStream的write重復的寫便可以了!別忘了封閉輸出輸入流哈