在Java中,将字符串转换为二进制表示通常涉及以下步骤:
- 将字符串转换为字节数组(使用指定编码,如UTF-8)。
- 将每个字节转换为8位二进制字符串。
以下是几种实现方式:
方法1:逐字节转换(推荐)
public class StringToBinary {
public static void main(String[] args) {
String str = "Hello";
String binaryStr = stringToBinary(str);
System.out.println("二进制表示: " + binaryStr);
}
public static String stringToBinary(String str) {
StringBuilder binary = new StringBuilder();
for (char c : str.toCharArray()) {
// 将字符转换为字节(UTF-8编码),然后转换为二进制
String binaryChar = String.format("%8s", Integer.toBinaryString(c & 0xFF))
.replace(' ', '0');
binary.append(binaryChar);
}
return binary.toString();
}
}
输出示例:
二进制表示: 0100100001100101011011000110110001101111
方法2:使用getBytes() + Integer.toBinaryString()
public class StringToBinary {
public static void main(String[] args) {
String str = "Java";
byte[] bytes = str.getBytes(StandardCharsets.UTF_8); // 指定编码
StringBuilder binary = new StringBuilder();
for (byte b : bytes) {
binary.append(String.format("%8s", Integer.toBinaryString(b & 0xFF))
.replace(' ', '0'));
}
System.out.println("二进制表示: " + binary);
}
}
输出示例:
二进制表示: 01001010011000010111011001100001
方法3:按位操作(更底层)
public class StringToBinary {
public static void main(String[] args) {
String str = "A";
byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
StringBuilder binary = new StringBuilder();
for (byte b : bytes) {
for (int i = 7; i >= 0; i--) {
binary.append((b >> i) & 1);
}
}
System.out.println("二进制表示: " + binary);
}
}
输出示例:
二进制表示: 01000001
注意事项:
- 编码问题:确保使用正确的字符编码(如
UTF-8),否则可能导致乱码或错误。 - 补码处理:
byte在Java中是带符号的,通过& 0xFF将其转换为无符号整数。 - 前导零:
Integer.toBinaryString()不会保留前导零,需用String.format()补全。
反向操作(二进制转字符串)
如果需要将二进制字符串转回原字符串:
public static String binaryToString(String binaryStr) {
StringBuilder str = new StringBuilder();
for (int i = 0; i < binaryStr.length(); i += 8) {
String byteStr = binaryStr.substring(i, i + 8);
char c = (char) Integer.parseInt(byteStr, 2);
str.append(c);
}
return str.toString();
}
- 推荐方法:使用
getBytes(StandardCharsets.UTF_8)+String.format(),代码简洁且可读性强。 - 适用场景:数据传输、加密、低级操作等需要二进制表示的场景。
