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 位的二进制文件的主要内容,如果未能解决你的问题,请参考以下文章