Java中char类型占2字节,如何从char变量获取原始字节?
Java中从char变量提取原始字节的方法
Java里的char是16位无符号UTF-16编码字符,对应2个字节。要提取它的原始字节,有两种常用方式:
方法一:位运算直接提取
利用位操作直接分离高8位和低8位,这种方式高效且无需额外依赖:
var ch = '文'; // 获取高字节(大端模式,符合UTF-16默认字节序) var b1 = (byte) ((ch >> 8) & 0xFF); // 获取低字节 var b2 = (byte) (ch & 0xFF);
说明:
ch >> 8:将char的16位值右移8位,得到高8位的数值& 0xFF:确保只保留低8位(避免int类型的符号扩展问题)- 强制转成
byte得到最终的单字节值
方法二:使用ByteBuffer(灵活处理字节序)
如果需要明确指定字节序(大端/小端),可以用ByteBuffer来实现:
import java.nio.ByteBuffer; import java.nio.ByteOrder; var ch = '文'; // 分配2字节的缓冲区 ByteBuffer buffer = ByteBuffer.allocate(2); // 指定字节序,可选BIG_ENDIAN(默认)或LITTLE_ENDIAN buffer.order(ByteOrder.BIG_ENDIAN); // 将char写入缓冲区 buffer.putChar(ch); // 提取字节数组 byte[] bytes = buffer.array(); var b1 = bytes[0]; var b2 = bytes[1];
说明:
- 默认字节序是大端(BIG_ENDIAN),和Java内部char的存储一致
- 如果需要小端字节序,只需把
ByteOrder.BIG_ENDIAN换成ByteOrder.LITTLE_ENDIAN
内容的提问来源于stack exchange,提问作者R A
相关产品推荐
相关产品推荐

