java进制转换应直接用带前缀字面量(如0b1100_0011、0xff)由编译器解析为整数,按语义选byte/int/biginteger等类型,位运算提取特定位,仅i/o时才字符串与字节数组互转。

Java 中进制转换的核心不是“转来转去”,而是用合适的数据类型直接承载原始值——二进制和十六进制在底层都是整数,编译器能自动解析,无需手动字符串转换。
用整型变量直接存字面量,让编译器干活
Java 支持带前缀的字面量,赋值后变量就已是对应数值,内部以二进制形式存储:
-
二进制:用
0b或0B前缀,如int x = 0b1100_0011;→ 存的是整数 195,不是字符串 -
十六进制:用
0x或0X前缀,如byte flag = 0xFF;→ 存的是 -1(byte 范围内),等价于二进制11111111 - 大小写不敏感:
0xA5和0xa5完全等价;下划线可增强可读性(如0b1010_1010)
按需选数据类型,匹配位宽和语义
不同场景选不同类型,关键看你要表达什么:
- 单字节协议字段、寄存器标志 → 用
byte(8 位),例如byte status = 0b00001010; - 通用整数运算、兼容性要求高 → 用
int(32 位),最常用,支持0x12345678 - 超大整数或精确位操作(如加密、大数计算)→ 用
BigInteger,支持任意长度二进制字符串构造:new BigInteger("110101", 2) - 注意:
short、long同样支持进制字面量,但需加后缀(如0xFFFF_FFFF_FFFFL)
需要提取/判断特定位?直接位运算,别转字符串
真正“解析”的需求,通常是读取某几位含义(比如协议中的控制位),这时位运算是最高效、最直观的方式:
- 取低 4 位(即十六进制个位):
value & 0x0F - 取第 5 位(从 0 开始计数)是否为 1:
(value >> 5) & 1 - 屏蔽某字段(如清零低 3 位):
value & ~0x07 - 设置某标志位(如置位第 2 位):
value | 0x04
字符串 ↔ 字节数组:仅在 I/O 或外部交互时才用
当数据来自文件、网络或日志(即以字符串形式存在),才需双向转换:
- 十六进制字符串 → 字节数组:
hexToBytes("A30F")返回{(byte)0xA3, (byte)0x0F} - 字节数组 → 十六进制字符串:
bytesToHex(new byte[]{(byte)0x9C})返回"9c"(可转大写并补零) - 避免对每个字节反复调用
Integer.toHexString(),应批量处理;注意大小端不影响单字节,但影响多字节拼接顺序
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











