Java 8环境下如何将无符号byte转换为有符号byte
转换逻辑说明
Java 中的byte类型本身默认是有符号的,取值范围为 -128 ~ 127,你从文件读取的无符号 byte 对应的字符串取值为0 ~ 255,二者底层的二进制存储完全一致,只是数值解读规则不同。要完成显式转换,只需要对解析得到的无符号整数值做& 0xFF位与操作后强转为byte即可,无需调用byteValue()方法。
改造后的代码
ByteArrayOutputStream output = new ByteArrayOutputStream(); for (String string : fileKeyString) { // 先解析无符号byte对应的整数值(范围0~255) int unsignedVal = Integer.parseInt(string); // 显式转换为Java有符号byte byte signedByte = (byte) (unsignedVal & 0xFF); output.write(signedByte); } return output.toByteArray();
注:如果你的
string取值保证在0~255范围内,上述转换是完全安全的,最终输出的数组和你原有代码的输出结果一致,但显式转换的逻辑更清晰,避免了隐式类型转换的歧义。如果后续需要把有符号byte转回无符号数值做运算,用signedByte & 0xFF就能得到对应0~255的int值。
内容的提问来源于stack exchange,提问作者kinda_raffy
相关产品推荐
相关产品推荐

