在java当中,如何将二进制转换成byte[]?

如何将byte[]转换成二进制?

bit:位/比特,缩写:b,只能用0或1表示,也就是二进制,每个0或1就是1bit
byte:字节,缩写:B 1byte=8bits,能够存储的数据范围是-128~+127。
1个字母=1个字节=8bit(8位)
1个数字=1个字节=8bit(8位)
1个汉字=2个字节=16bit(16位)(使用UTF-8字符集,1个汉字=3个字节=24bit)
1 Byte = 8 Bits
1 KB = 1024 Bytes
1 MB = 1024 KB
1 GB = 1024 MB

二进制转byte数组

  1. /*
  2. * bit转byte
  3. * @description: 比特转字节
  4. * @date: 2022/4/1 10:51
  5. * @param: bitStr 只能是4位比特或8位比特
  6. * @return: byte 1个字节
  7. */
  8. public static byte toByte(String bitStr) {
  9. if (StringUtils.isEmpty(bitStr)) return 0;
  10. int re, len;
  11. len = bitStr.length();
  12. if (len != 4 && len != 8) return 0;
  13. if (len == 8) {// 8 bits处理
  14. if (bitStr.charAt(0) == '0') {// 正数
  15. re = Integer.parseInt(bitStr, 2);
  16. } else {// 负数
  17. re = Integer.parseInt(bitStr, 2) - 256;
  18. }
  19. } else {//4 bits处理
  20. re = Integer.parseInt(bitStr, 2);
  21. }
  22. return (byte) re;
  23. }
  24. /*
  25. * bit转byte数组
  26. * @description:
  27. * @date: 2022/4/6 10:46
  28. * @param: bitStr 二进制字符串
  29. * @return: byte[] 字节数组
  30. */
  31. @Nullable
  32. public static byte[] toBytes(String bitStr) {
  33. if (StringUtils.isEmpty(bitStr)) return null;
  34. int len = bitStr.length();
  35. if (len % 4 != 0) return null;
  36. // 当二进制位数不是8位的整数倍时,取整+1;否则,取整
  37. byte[] bytes = new byte[(int)(Math.ceil(len / 8))];
  38. int j = 0, k = 0;
  39. for (int i = 0; i < len; i += 8) {
  40. j += 8;
  41. if (j > len) j = len;
  42. bytes[k] = toByte(bitStr.substring(i,j));
  43. k++;
  44. }
  45. log.debug("二进制转byte数组:\n{}", ByteUtils.toString(bytes));
  46. log.debug("二进制长度:{},字节大小:{},比特÷字节={}", bitStr.length(), bytes.length, bitStr.length() / bytes.length);
  47. return bytes;
  48. }

byte数组转二进制

  1. /*
  2. * byte转bit
  3. * @description: 字节转比特
  4. * 1Byte=8bits
  5. * @date: 2022/4/1 10:43
  6. * @param: b 字节
  7. * @return: java.lang.String 二进制字符串(8位0和1)
  8. */
  9. @NotNull
  10. @Contract(pure = true)
  11. public static String fromByte(byte b) {
  12. return "" + (byte) ((b >> 7) & 0x1) +
  13. (byte) ((b >> 6) & 0x1) +
  14. (byte) ((b >> 5) & 0x1) +
  15. (byte) ((b >> 4) & 0x1) +
  16. (byte) ((b >> 3) & 0x1) +
  17. (byte) ((b >> 2) & 0x1) +
  18. (byte) ((b >> 1) & 0x1) +
  19. (byte) ((b) & 0x1);
  20. }
  21. /*
  22. * byte[]转bits
  23. * @description: 字节数组转比特字符串
  24. * @date: 2022/4/1 11:04
  25. * @param: bytes 字节数组
  26. * @return: java.lang.String 比特字符串
  27. * 1byte=8bit
  28. */
  29. @NotNull
  30. public static String fromBytes(byte[] bytes) {
  31. if (ByteUtils.isEmpty(bytes)) return "";
  32. StringBuilder sb = new StringBuilder();
  33. ByteUtils.toList(bytes).forEach(b -> sb.append(fromByte(b)));
  34. log.debug("字节数组转二进制:\n{}", sb);
  35. log.debug("二进制长度:{},字节大小:{},比特÷字节={}", sb.toString().length(), bytes.length, sb.toString().length() / bytes.length);
  36. return sb.toString();
  37. }

测试

  1. fromBytes(toBytes("1000000110101110"));

 

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!