我使用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
由于
答案 0 :(得分:3)
数组中的字节已经是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
其他建议无法正常使用值> 128(或< 0)除非你正确添加512和掩码,否则实际上更好:
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 <1>通用1到62位。 2 ^ 62:
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);
答案 1 :(得分:1)
稍微简单一些:Integer.toBinaryString(768+b).substring(2)
答案 2 :(得分:0)
我猜这是二进制和十进制之间的差异。通常,我们认为字节按照定义具有8位。然而,普通的8位数字必须以非零数字开头(除非它是商业号码,如ISBN),8位字节可以从0开始。
所以看起来你想要最重要的一点是1 - 我想。
有一种简单的方法来修复&#34;那:number | 128
。并且它不应该损害随机性。