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

Posted

技术标签:

【中文标题】Java,打印一个包含所有 16 位的二进制文件【英文标题】:Java, print a short as binary with all 16 bits 【发布时间】:2015-07-20 18:09:32 【问题描述】:

例如:

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

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

10 -> 1010 15 -> 1111

是否有可以打印所有 16 位数字的函数,或者我必须自己编写。

【问题讨论】:

【参考方案1】:

您可以用 0 填充左侧:

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

【讨论】:

【参考方案2】:

附加手动 0 可能会有所帮助

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

将生成0000000000000001

【讨论】:

【参考方案3】:

您还可以使用以下技巧显示前导 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

【讨论】:

【参考方案4】:

您可以使用String.format() 在结果前添加填充。填充必须是空格,因为Integer.toBinaryString() 返回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

【讨论】:

以上是关于Java,打印一个包含所有 16 位的二进制文件的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中确定和打印文件大小

unicode字符集是多少位的字符编码

打印变量地址-0x%08x

java 十进制转二进制!

遍历 .json 文件并打印 JAVA 中的所有值 [重复]

Java字符流和字节流对文件操作的区别