您的位置:首页 > 编程语言 > Java开发

每日一算法--java的16进制与字符串的相互转换函数

2016-01-12 10:34 676 查看
1.将指定的byte数组,以16进制的形式打印到控制台

1. /**

2. * 将指定byte数组以16进制的形式打印到控制台

3. * @param hint String

4. * @param b byte[]

5. * @return void

6. */

7. public static void printHexString(String hint, byte[] b) {

8. System.out.print(hint);

9. for (int i = 0; i < b.length; i++) {

10. String hex = Integer.toHexString(b[i] & 0xFF);

11. if (hex.length() == 1) {

12. hex = '0' + hex; //统一格式(2位数)

13. }

14. System.out.print(hex.toUpperCase() + " ");

15. }

16. System.out.println("");

17. }

计算机中使用补码存放负数,现按照8位数码来解释-1:

-1原码:1 0000 0001 -1补码:1 1111 1111(计算机中实际存储的是这个)

故-1的十六进制为FF。

这个工作过程大致是个这样子的:

java中一个byte为8位,而int为32位,故需要用b[i] & 0xFF来掩掉其他多余24位,现以1和-1为例:

1计算机中实际存储的是:

0000 0000 0000 00000 0000 0000 0000 00001

因为一个字节数值范围在00-FF之间,故只需要最后8位即可,将其余24位掩掉,即按位与0XFF:0000 0000 0000 00000 0000 0000 1111 11111

得到的还是1,故1的十六进制转出为01

-1计算机中实际存储的是(补码):

1 1111 1111 1111 1111 1111 1111 1111 1111,

若直接转十六进制则为FFFFFFFF,而一个字节数值范围在00-FF之间,所以我们只需要后8位即可,将前24个1掩掉(即按位与0XFF)得到:

1 0000 0000 0000 0000 0000 0000 1111 1111

即转出的十六进制为FF
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: