如何在字符串中打印第一个字符的二进制表示

时间:2011-06-17 04:56:21

标签: java

我想检索文件中数据的二进制值。所以我写了以下代码:

while ((fileData = br.readLine()) != null) {
  byte b[] = fileData.getBytes("UTF-8");
  BigInteger bi = new BigInteger(b);
  String s = bi.toString(2);
  System.out.println("Original message in binary: " + s);
  System.out.println("Original message length: " + s.length());
}

输出:

abca (this is the data in a text file)
Original message in binary: <here>1100001011000100110001101100001
Original message length: 31

一切都很好,但是当我以二进制格式打印数据时,我无法打印第一位(<here>),任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:6)

第一个角色:

s.charAt(0);

修改 如果要打印第一个字节的二进制表示,请尝试以下操作:

    String str = Integer.toBinaryString("abca".getBytes("UTF-8")[0]);
    System.out.println(str);

编辑2: 尝试使用此前导零。

static String addLeadingZeroes(String s) {
    int zeroes = s.length() % 8;
    byte[] bzero = new byte[8 - zeroes];
    Arrays.fill(bzero, (byte)0x30);
    return new StringBuilder(new String(bzero)).append(s).toString();
}

并致电

System.out.println("Original message in binary: "+ addLeadingZeroes(s));

答案 1 :(得分:1)

我假设你所说的是当第一个二进制数字为“0”时,它不显示。如果要确保显示完整的32位二进制数字,可以使用以下代码。

public static final THIRTYTWO_ZEROS = "00000000000000000000000000000000";

String s = bi.toString(2);
s = THIRTYTWO_ZEROS.substring(s.length) + s;

这样可以将前面带有“0”字符的字符串填充为32个字符的长度。