Java中十六进制转换 Integer.toHexString()

来源:互联网 发布:网络销售公司管理制度 编辑:程序博客网 时间:2024/04/29 10:52

为了显示一个byte型的单字节十六进制(两位十六进制表示)的编码,请使用:

Integer.toHexString((byteVar & 0x000000FF) | 0xFFFFFF00).substring(6)

byteVar & 0x000000FF的作用是,如果byteVar 是负数,则会清除前面24个零,正的byte整型不受影响。(...) | 0xFFFFFF00的作用是,如果byteVar 是正数,则置前24位为一,这样toHexString输出一个小于等于15的byte整型的十六进制时,倒数第二位为零且不会被丢弃,这样可以通过substring方法进行截取最后两位即可。

Java代码 复制代码
  1. importjunit.framework.TestCase; 
  2. publicclassHex extendsTestCase
  3. publicvoidtestPositiveIntToHex()
  4. //如果正数小于15时,只输入一位,而不是按我们想像的两位标准十六进制输出显示的,后面解决这个问题
  5. System.out.println(Integer.toHexString(2));//2
  6. System.out.println(Integer.toHexString(15));//f
  7. System.out.println(Integer.toHexString(16));//10
  8. System.out.println(Integer.valueOf("F",16));//16
  9. publicvoidtestNegativeIntToHex()
  10. //负整数时,前面输入了多余的FF ,没有去掉前面多余的 FF,按并双字节形式输出
  11. System.out.println(Integer.toHexString(-2).toUpperCase());//FFFFFFFE
  12. //实质上0xFF会像转换成0x000000FF后再进行位运算
  13. System.out.println(Integer.toHexString(-2& 0xFF).toUpperCase());//FE
  14. System.out.println(Integer.toHexString(-2& 0x000000FF).toUpperCase());//FE
  15. //注,FE输出时不会为-2,因为此时不会把FE看成负数,valueOf会把所有数字串看成正的
  16. System.out.println(Integer.valueOf("FE",16));//254
  17. //如果要输出-2,只能按以下形式输出
  18. System.out.println(Integer.valueOf("-2",16));//-2
  19. //所以要把FE 看成负的话,只能在前面加上负号,但是这里输出还不是-2,
  20. //而是先计算Integer.valueOf("FE",16),再在结果前加上负
  21. System.out.println(Integer.valueOf("-FE",16));//-254
  22. System.out.println(Integer.valueOf("-80",16));//-128
  23. System.out.println(Integer.valueOf("7fffffff",16));//2147483647
  24. //此句运行时会报错,因为最大正数为7fffffff,但如-80000000 却又可以运行,因为没超出整数范围
  25. //System.out.println(Integer.valueOf("80000000",16));//不能运行,已注掉
  26. System.out.println(Integer.valueOf("-80000000",16));//-2147483648
  27. System.out.println(0xFE);//254
  28. System.out.println(-0xFE);//-254
  29. //但0x80000000已满,无需补,第一位为一,所以最后为负数
  30. System.out.println(0x80000000);//-2147483648
  31. publicvoidtestNegativeIntToBin()
  32. System.out.println(Integer.toBinaryString(-2));//11111111111111111111111111111110
  33. //实质上0xFF会像转换成0x000000FF后再进行位运算
  34. System.out.println(Integer.toBinaryString(-2& 0xFF));//11111110
  35. System.out.println(Integer.toBinaryString(-2& 0x000000FF));//11111110
  36. //与上面十六进制是一样的
  37. System.out.println(Integer.valueOf("1111111111111111111111111111111",2));//2147483647
  38. //下面语句运行会出错,已注掉
  39. //System.out.println(Integer.valueOf("10000000000000000000000000000000",2));
  40. System.out.println(Integer.valueOf("-10000000000000000000000000000000",2));//-2147483648
  41. System.out.println(Integer.valueOf("11111110",2));//254
  42. System.out.println(Integer.valueOf("-11111110",2));//-254
  43. System.out.println(010);//8
  44. System.out.println(10);//10
  45. publicvoidtestByteToHex()
  46. bytenegativeByte = -2
  47. bytepositiveByte = 2
  48. System.out.println(Integer.toHexString(negativeByte).toUpperCase());//FFFFFFFE
  49. System.out.println(Integer.toHexString(negativeByte& 0xFF).toUpperCase());//FE
  50. //另一种转换,可以针对负数与正数的byte都可以以完整的单字节输出
  51. System.out.println(Integer.toHexString((negativeByte& 0x000000ff)| 0xffffff00
  52. .substring(6).toUpperCase());//FE
  53. System.out.println(Integer.toHexString((positiveByte& 0x000000ff)| 0xffffff00
  54. .substring(6).toUpperCase());//02
  55. publicvoidtestBiteMathematical()
  56. System.out.println(0x8000000000000000L);//-9223372036854775808
  57. System.out.println((int)0x8000000000000000L);//0
  58. System.out.println(0x8000000000000010L);//-9223372036854775792
  59. System.out.println(0x80000000);//-2147483648
  60. System.out.println(0x80000010);//-2147483632
  61. //0x00000010提升成长整型,最后结果为长整型0x8000000000000010L
  62. System.out.println(0x00000010| 0x8000000000000000L);//-9223372036854775792
  63. //0x0010提升成整形,最后结果为整型0x80000010
  64. System.out.println(0x0010| 0x80000000);//-2147483632
  65. }
原创粉丝点击