【问题标题】:How do I print the binary representation of the first character in a string如何打印字符串中第一个字符的二进制表示
【发布时间】:2011-06-17 04:56:20
【问题描述】:

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

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

一切都很好,但是当我以二进制格式打印数据时,我无法打印第一位 (&lt;here&gt;) 谁能帮助我?

【问题讨论】:

    标签: java


    【解决方案1】:

    对于第一个字符:

    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));
    

    【讨论】:

    • 谢谢。但它正在打印一个字符。但我希望它以二进制表示形式打印在字符串中
    • @user631785: 你想把'1'打印成“0000 0001”还是“0011 0000”?
    • 请注意,根据download.oracle.com/javase/1.5.0/docs/api/java/lang/…“这个值被转换为二进制(以2为底)的ASCII数字字符串没有额外的前导0
    • static String addLeadingZeroes(String s) { return "00000000".substring(s.length % 8) + s;} 简单一点,imo
    【解决方案2】:

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

    public static final THIRTYTWO_ZEROS = "00000000000000000000000000000000";
    
    String s = bi.toString(2);
    s = THIRTYTWO_ZEROS.substring(s.length) + s;
    

    这具有将前面的“0”字符填充到 32 个字符的字符串的效果。

    【讨论】:

      猜你喜欢
      • 2015-08-22
      • 2019-02-19
      • 2019-09-13
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      • 2021-11-29
      • 1970-01-01
      • 2019-08-12
      相关资源
      最近更新 更多