Java,打印一个包含所有 16 位的二进制文件

Java, print a short as binary with all 16 bits

例如:

10 -> 0000 0000 0000 1010
15 -> 0000 0000 0000 1111

我尝试使用 Integer.toBinaryString(),但打印出

10 -> 1010
15 -> 1111

是否有可以打印所有 16 位数字的短片的功能,还是我必须自己编写。

您可以用 0 填充左侧:

int x=10;//or whatever
String.format("%016d", Integer.parseInt(Integer.toBinaryString(x)));

附加手动 0 可能会有帮助

String.format("%16s", Integer.toBinaryString(1)).replace(' ', '0')

会生成0000000000000001

您也可以使用以下技巧来显示前导 zero/s。有关详细信息,请查看 this thread

int displayMask = 1 << (size - 1);
StringBuffer buf = new StringBuffer( size);
for ( int c = 1; c <= size; c++ ) 
{
    buf.append( ( value & displayMask ) == 0 ? '0' : '1' );
    value <<= 1;
}

根据 this answer Integer.toBinaryString() 领先 zeros 仅适用于 Integer/int。它不适用于 byte

您可以使用 String.format() 在结果前添加填充。 padding 必须是空格,因为 Integer.toBinaryString() returns a String。然后你需要做的就是用零替换空格(0)并拆分每个半字节(第四位)。

import java.util.*;

public class BinaryNumberPrinter {
  public static void main(String[] args) {
    int[] numbers = { 10, 15 };

    for (int number : numbers) {
      String binaryValue = join(splitEveryFour(toShortBinary(number)), " ");
      System.out.printf("%d -> %s%n", number, binaryValue);
    }
  }

  public static String toShortBinary(int value) {
    return String.format("%16s", Integer.toBinaryString(value)).replace(' ', '0');
  }

  public static List<String> splitEveryFour(String value) {
    return Arrays.asList(value.split("(?<=\G....)"));
  }

  public static String join(Iterable<? extends CharSequence> s, String delimiter) {
    Iterator<? extends CharSequence> iter = s.iterator();
    if (!iter.hasNext()) return "";
    StringBuilder buff = new StringBuilder(iter.next());
    while (iter.hasNext()) buff.append(delimiter).append(iter.next());
    return buff.toString();
  }
}

预期输出:

10 -> 0000 0000 0000 1010
15 -> 0000 0000 0000 1111