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

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

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

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

Java代码 复制代码
  1. import junit.framework.TestCase; 
  2. public class Hex extends TestCase
  3. public void testPositiveIntToHex()
  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. public void testNegativeIntToHex()
  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. public void testNegativeIntToBin()
  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. public void testByteToHex()
  46. byte negativeByte = -2
  47. byte positiveByte = 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. public void testBiteMathematical()
  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. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值