我有一个包含不同字符的字符,我想将这些字符的二进制值打印成两个4字节的部分。我在开头添加1,这样每个都是4。
System.out.println(1 + Integer.toString(mychar[i],2));
我正在使用for循环来浏览不同的字符并创建一个表。通过这样做,我可以得到二进制值加上一个。但我不知道如何将它分成两个4字节。
让我们假设mychar[i]
持有String bryan。输出应该如下。
b 1110 0010 r 1111 0010 y 1111 1001 a 1110 0001 n 1110 1110
答案 0 :(得分:3)
我已经使用this answer来找到解决方案:
private static String toBinaryRepresentation(String name) {
// 11 is size of "0000 0000\r\n
StringBuilder sb = new StringBuilder(name.length() * 11);
for (int i = 0; i < name.length(); i++) {
String binRep = toBinaryRepresentation(name.charAt(i));
sb.append(String.format("%s%n", binRep));
}
return sb.toString();
}
private static String toBinaryRepresentation(char c) {
if (c > 0xFF) {
throw new IllegalArgumentException("Character value too high to print");
}
int highNibble = (c >> 4) & 0xF;
String highBinaryDigits = String.format("%4s", Integer.toBinaryString(highNibble)).replace(' ', '0');
int lowNibble = c & 0xF;
String lowBinaryDigits = String.format("%4s", Integer.toBinaryString(lowNibble)).replace(' ', '0');
return String.format("%s %s", highBinaryDigits, lowBinaryDigits);
}
您可以通过调用此函数来使用:
String name = "brian";
System.out.print(toBinaryRepresentation(name));
打印:
0110 0010
0111 0010
0110 1001
0110 0001
0110 1110
因此,首先将高半字节和低半字节分开,然后使用精确的4位打印该值,即使它们为零。
答案 1 :(得分:3)
转换为二进制文件时,我个人最喜欢零填充(即字节,短字等):
String binaryRep = Integer.toBinaryString( 0x100 | mychar[i] & 0xff ).substring(1);
&
确保mychar[i]
0x100 |
部分设置第9位。这意味着最右边8位的所有零都将在结果中表示,结果恰好是9个字符。当然,上面假设一个符合8位的字符。如果您尝试中文或阿拉伯字符,它基本上只会给你最右边的8位。
无论您使用哪种方法生成8个零填充位,您都需要在中间添加空格。对于我上面的方法,我们可以进行修改:
public static String eightBitCharToBinary( char c ) {
String charAsNineBits = Integer.toBinaryString( 0x100 | c & 0xff );
return charAsNineBits.substring(1,5) + " " + charAsNineBits.substring(5,9);
}
与上面的相同,但不是仅仅取一个子串,而是取两个子串并在中间放置一个空格。
答案 2 :(得分:1)
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
td { width:30px; height: 30px; text-align: center; }
</style>
</head>
<body>
<table border=1>
<tr>
<td colspan=2>12</td>
<td>3</td>
</tr>
<tr>
<td>4</td>
<td colspan=2 rowspan=2>56<br/>89</td>
</tr>
<tr>
<td>7</td>
</tr>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
</tr>
</table>
</body>
</html>
答案 3 :(得分:1)
char c = 'b';
String binaryString =Integer.toBinaryString(c);
System.out.println("1" + binaryString.substring(0, 3) + " " + binaryString.substring(3));