我使用了random.nextBytes()
方法,它会生成随机的bytes
。但我希望每个byte
具有8位的固定长度。我怎么做?
SecureRandom random=new SecureRandom();
byte[] data=new byte[2];
random.nextBytes(data);
System.out.println(Integer.toBinaryString(data[0]));
System.out.println(Integer.toBinaryString(data[1]));
这是我得到的输出
1000
110010
谢谢
最佳答案
数组中的字节已经是8位的固定长度。如果您真正要说的是要以8位固定长度打印它们,则可以执行以下操作:
System.out.println(String.format("%8s", Integer.toBinaryString(data[0] & 0xFF)).replace(' ', '0'));
System.out.println(String.format("%8s", Integer.toBinaryString(data[1] & 0xFF)).replace(' ', '0'));
将打印
00001000
00110010
除非您添加512并正确屏蔽,否则其他建议对于> 128(或
System.out.println(Integer.toBinaryString((0x100|0xff&data[1]).substring(1))
我要添加最后一部分,这要归功于Hot Licks,因为这是我见过的最好的部分。它适用于
Integer.toBinaryString()
接受的所有类型。Integer.toBinaryString(0x300+b).substring(2) //for b < 256
如果想要16位结果,可以执行以下操作:
Integer.toBinaryString(0x30000+bb).substring(2) //for bb < 65536
对于n
int bits = 8;
Long mask = (1L << bits) - 1;
Long.toBinaryString((3L << bits) + (mask & n)).substring(2);
63位是一种特殊情况:
Long.toBinaryString((1L << bits) + (mask & n)).substring(1);