麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

HexString與BinaryString間轉換

2019-11-06 08:04:15
字體:
來源:轉載
供稿:網友

HexString轉為BinaryString

背景介紹

前面提到一種十六進制轉二進制的方法

Integer.toBinaryString(Integer.valueOf("FFFF",16));

其中”FFFF”是你輸入的hexString。

結果展示:

HexString BinaryString
0xFF 1111 1111
0x1F 1 1111
0x00 1F 1 1111
0xFF FF FF FF ERROR

從上面表格你可以看出兩個問題:

這個方法雖然輸出的字符串。然而高位的0被剔除掉了。當輸入的十六進制是大于7位時,該方法就無法使用了。

第2點的原因是int雖然占4個byte,也就是32個bit,但是最高位是符號位。 也就是說int的取值范圍是[ -2^31 , 2^31-1 ],這是裝不下4個byte的。 因此該方法最大傳值是”F FF FF FF”

思路

基于上面的原因,當你的需求是將十六進制字符串 轉為 二進制字符串 時,就要自己想辦法了。

我們肯定還是要用到toBinaryString這個方法的。既然HexString不能超過7位,那我們就截斷,分部分轉換。但toBinaryString會把高位的0舍棄,因此我們還需要補零。

代碼

public static String hexString2binaryString(String hexString) { if (TextUtils.isEmpty(hexString)) { return null; } String binaryString = ""; for (int i = 0; i < hexString.length(); i++) { //截取hexStr的一位 String hex = hexString.substring(i, i + 1); //通過toBinaryString將十六進制轉為二進制 String binary = Integer.toBinaryString(Integer.parseInt(hex, 16)); //因為高位0會被舍棄,先補上4個0 String tmp = "0000" + binary; //取最后4位,將多補的0去掉 binaryString += tmp.substring(tmp.length() - 4); } return binaryString;}

上面這段代碼比較巧妙的就是補齊被舍去的高位的0的這兩步。 我們還通過表格演示:

HexString toBinaryString 補零 取后4位
F 1111 00001111 1111
1 1 00001 0001

BinaryString轉為HexString

代碼

public static String binaryString2hexString(String binaryString) { if (TextUtils.isEmpty(binaryString) || binaryString.length() % 4 != 0) { return null; } String hexString = ""; int bit = 0; for (int i = 0; i < binaryString.length(); i += 4) { bit = 0; for (int j = 0; j < 4; j++) { String x = binaryString.substring(i + j, i + j + 1); bit += Integer.parseInt(x) << (4 - j - 1); } hexString += Integer.toHexString(bit); } return hexString.toString();}

思路

我們肯定還是要用到toHexString這個方法的。toHexString傳入的是int,同樣,位數是受限制的,因此需要拆分轉換。因為0xF = 1111,因此這邊準備每4bit做一次轉換。

我這里把外層for循環里的代碼我拆解了一下:

int bit = 0;//存放一個4位二進制數字//這個for循環i += 4,意思是每次跳過4個字符//即 每次循環處理的是4位,(1位十六進制占 4 位二進制,eg:0xF = 1111)//其實就是每次取4位,轉為十六進制的1位//因為字符串沒有高低位之分,索引轉為for (int i = 0; i < binaryString.length(); i += 4) { //假設本次循環拿到的二進制數字是:1001 //取第一個字符:"1" String str4 = binaryString.substring(i, i + 1); //將這個1轉為int得到0001,左移3位,將這個1放在最高位 :1000(1xxx) int bit4 = Integer.parseInt(str4) << 3; //取第二個字符:"0",左移2位,得到:0000(x0xx) int bit3 = Integer.parseInt(binaryString.substring(i + 1, i + 2)) << 2; //取第三個字符:"0",左移1位,得到:0000(xx0x) int bit2 = Integer.parseInt(binaryString.substring(i + 2, i + 3)) << 1; //取第三個字符:"1",不用移動,得到:0001(xxx1) int bit1 = Integer.parseInt(binaryString.substring(i + 3, i + 4)); //1001 = 1000 + 0000 + 0000 + 0001 bit = bit4 + bit3 + bit2 + bit1; hexString += Integer.toHexString(bit);//將二進制轉為十六進制}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 毛片在线免费观看视频 | 成人在线免费观看小视频 | 国产污污视频 | 草草视频免费 | 中文字幕1区2区 | 亚洲最新黄色网址 | 欧美一级视屏 | 把娇妻调教成暴露狂 | 国产无遮挡一区二区三区毛片日本 | 国产精品视频一区二区三区四区五区 | 免费观看亚洲视频 | 午夜视频在线在免费 | av播放在线 | 欧美亚洲综合网 | 性欧美大战久久久久久久免费观看 | 九一免费国产 | 精品久久久久久久久久久αⅴ | 姑娘第四集免费看视频 | 九九精品免费 | 亚洲片在线 | 激情视频在线播放 | 国产日韩久久久久69影院 | 法国性经典xxxhd | 亚州精品天堂中文字幕 | 国产青草网 | 欧美一级黄色录相 | 日本在线播放一区 | 2021国产精品 | 最新中文在线视频 | 龙的两根好大拔不出去h | 欧美日韩高清在线观看 | 精品一区二区电影 | 日日影视 | 亚洲三区精品 | 久久久久久久久久亚洲 | 日韩精品久久久久久久电影99爱 | 欧美成人一级 | 欧美性生活视频免费 | 久久色在线 | 少妇的肉体2无删减版 | 久久久电影电视剧免费看 |