二进制十六进制相互转换

我就是我 2024-04-17 23:07 151阅读 0赞

使用Java自带的转换方法也可以但是会有如下情况发生:

Integer.toBinaryString(Integer.valueOf(“0020”,16))。—-java自封装的方法

  1. 如果十六进制为“0020”类似这种的情况就会转换为100000,有0的则不会转换。
  2. 十六进制很长的时候就会出错,因为通过这样的转换,在把字符串转成整形的时候,长度太长了,超过的整形的最大值,。

于是便有了如下代码

  1. public class BinaryConversion {
  2. private static String hexStr = "0123456789ABCDEF";
  3. private static String[] binaryArray =
  4. {"0000","0001","0010","0011",
  5. "0100","0101","0110","0111",
  6. "1000","1001","1010","1011",
  7. "1100","1101","1110","1111"};
  8. /**
  9. *
  10. * @param str
  11. * @return 二进制数组转换为二进制字符串 2-2
  12. */
  13. public static String bytes2BinStr(byte[] bArray){
  14. String outStr = "";
  15. int pos = 0;
  16. for(byte b:bArray){
  17. //高四位
  18. pos = (b&0xF0)>>4;
  19. outStr+=binaryArray[pos];
  20. //低四位
  21. pos=b&0x0F;
  22. outStr+=binaryArray[pos];
  23. }
  24. return outStr;
  25. }
  26. /**
  27. *
  28. * @param bytes
  29. * @return 将二进制数组转换为十六进制字符串 2-16
  30. */
  31. public static String bin2HexStr(byte[] bytes){
  32. String result = "";
  33. String hex = "";
  34. for(int i=0;i<bytes.length;i++){
  35. //字节高4位
  36. hex = String.valueOf(hexStr.charAt((bytes[i]&0xF0)>>4));
  37. //字节低4位
  38. hex += String.valueOf(hexStr.charAt(bytes[i]&0x0F));
  39. result +=hex; //+" "
  40. }
  41. return result;
  42. }
  43. /**
  44. *
  45. * @param hexString
  46. * @return 将十六进制转换为二进制字节数组 16-2
  47. */
  48. public static byte[] hexStr2BinArr(String hexString){
  49. //hexString的长度对2取整,作为bytes的长度
  50. int len = hexString.length()/2;
  51. byte[] bytes = new byte[len];
  52. byte high = 0;//字节高四位
  53. byte low = 0;//字节低四位
  54. for(int i=0;i<len;i++){
  55. //右移四位得到高位
  56. high = (byte)((hexStr.indexOf(hexString.charAt(2*i)))<<4);
  57. low = (byte)hexStr.indexOf(hexString.charAt(2*i+1));
  58. bytes[i] = (byte) (high|low);//高地位做或运算
  59. }
  60. return bytes;
  61. }
  62. /**
  63. *
  64. * @param hexString
  65. * @return 将十六进制转换为二进制字符串 16-2
  66. */
  67. public static String hexStr2BinStr(String hexString){
  68. return bytes2BinStr(hexStr2BinArr(hexString));
  69. }
  70. }

思路:

1、二进制字节转十六进制时,将字节高位与0xF0做”&”操作,然后再左移4位,得到字节高位的十六进制A;将字节低位与0x0F做”&”操作,得到低位的十六进制B,将两个十六进制数拼装到一块AB就是该字节的十六进制表示。
2、十六进制转二进制字节时,将十六进制字符对应的十进制数字右移动4为,得到字节高位A;将字节低位的十六进制字符对应的十进制数字B与A做”|”运算,即可得到十六进制的二进制字节表示

参考:

  1. [https://blog.csdn.net/y353027520dx/article/details/51483558][https_blog.csdn.net_y353027520dx_article_details_51483558]
  2. [https://www.cnblogs.com/Free-Thinker/p/6808510.html][https_www.cnblogs.com_Free-Thinker_p_6808510.html]

发表评论

表情:
评论列表 (有 0 条评论,151人围观)

还没有评论,来说两句吧...

相关阅读