java byte数组与二进制互相转换 20257694编辑
Heaven helps those who help themselves
资深码农+深耕理财=财富自由
欢迎关注
资深码农+深耕理财=财富自由
欢迎关注

java byte数组与二进制互相转换
Created by Marydon on 2022-04-06 10:52
1.情景展示
在java当中,如何将二进制转换成byte[]?
如何将byte[]转换成二进制?
2.具体分析
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
3.解决方案
二进制转byte数组
/* * bit转byte * @description: 比特转字节 * @date: 2022/4/1 10:51 * @param: bitStr 只能是4位比特或8位比特 * @return: byte 1个字节 */ public static byte toByte(String bitStr) { if (StringUtils.isEmpty(bitStr)) return 0; int re, len; len = bitStr.length(); if (len != 4 && len != 8) return 0; if (len == 8) {// 8 bits处理 if (bitStr.charAt(0) == '0') {// 正数 re = Integer.parseInt(bitStr, 2); } else {// 负数 re = Integer.parseInt(bitStr, 2) - 256; } } else {//4 bits处理 re = Integer.parseInt(bitStr, 2); } return (byte) re; } /* * bit转byte数组 * @description: * @date: 2022/4/6 10:46 * @param: bitStr 二进制字符串 * @return: byte[] 字节数组 */ @Nullable public static byte[] toBytes(String bitStr) { if (StringUtils.isEmpty(bitStr)) return null; int len = bitStr.length(); if (len % 4 != 0) return null; // 当二进制位数不是8位的整数倍时,取整+1;否则,取整 byte[] bytes = new byte[(int)(Math.ceil(len / 8))]; int j = 0, k = 0; for (int i = 0; i < len; i += 8) { j += 8; if (j > len) j = len; bytes[k] = toByte(bitStr.substring(i,j)); k++; } log.debug("二进制转byte数组:\n{}", ByteUtils.toString(bytes)); log.debug("二进制长度:{},字节大小:{},比特÷字节={}", bitStr.length(), bytes.length, bitStr.length() / bytes.length); return bytes; }
byte数组转二进制
/* * byte转bit * @description: 字节转比特 * 1Byte=8bits * @date: 2022/4/1 10:43 * @param: b 字节 * @return: java.lang.String 二进制字符串(8位0和1) */ @NotNull @Contract(pure = true) public static String fromByte(byte b) { return "" + (byte) ((b >> 7) & 0x1) + (byte) ((b >> 6) & 0x1) + (byte) ((b >> 5) & 0x1) + (byte) ((b >> 4) & 0x1) + (byte) ((b >> 3) & 0x1) + (byte) ((b >> 2) & 0x1) + (byte) ((b >> 1) & 0x1) + (byte) ((b) & 0x1); } /* * byte[]转bits * @description: 字节数组转比特字符串 * @date: 2022/4/1 11:04 * @param: bytes 字节数组 * @return: java.lang.String 比特字符串 * 1byte=8bit */ @NotNull public static String fromBytes(byte[] bytes) { if (ByteUtils.isEmpty(bytes)) return ""; StringBuilder sb = new StringBuilder(); ByteUtils.toList(bytes).forEach(b -> sb.append(fromByte(b))); log.debug("字节数组转二进制:\n{}", sb); log.debug("二进制长度:{},字节大小:{},比特÷字节={}", sb.toString().length(), bytes.length, sb.toString().length() / bytes.length); return sb.toString(); }
测试
fromBytes(toBytes("1000000110101110"));
与君共勉:最实用的自律是攒钱,最养眼的自律是健身,最健康的自律是早睡,最改变气质的自律是看书,最好的自律是经济独立 。
您的一个点赞,一句留言,一次打赏,就是博主创作的动力源泉!
↓↓↓↓↓↓写的不错,对你有帮助?赏博主一口饭吧↓↓↓↓↓↓
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/16105424.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~