我使用了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);

09-27 21:19