我无法理解0xFF7F和它下面的两行发生了什么。这里有一个链接可以在一定程度上解释它。 http://www.herongyang.com/java/Bit-String-Set-Bit-to-Byte-Array.html 我不知道0xFF7F >> posBit)& oldByte)& 0x00FF 应该是3个值'AND'在一起,或者这应该如何读取。如果有人能够澄清这里发生的一些事情,我将不胜感激。使用位移和十六进制代码的setBit java方法 - 问题
private static void setBit(byte[] data,
final int pos,
final int val) {
int posByte = pos/8;
int posBit = pos%8;
byte oldByte = data[posByte];
oldByte = (byte) (((0xFF7F>>posBit) & oldByte) & 0x00FF);
byte newByte = (byte) ((val<<(8-(posBit+1))) | oldByte);
data[posByte] = newByte;
}
传入此方法,因为selectBits方法的参数是setBit(out,i,val); out =是byte [] out = new byte [numOfBytes]; (在这种情况下,numOfBytes可以是7) i =它是数字[57],它是PC1 int数组中包含56个整数的原始数字。 val =这是从getBit()方法的字节数组中取出的位。
什么是虽然十六进制数字的意义是什么?为什么在这种情况下选择0xFF7F和0x00FF? – 2010-04-16 22:43:50
它们是_masks_,与AND运算符一起使用来选择一些位。在第一种情况下,使用0xFF7F是因为你想设置一个指定的位,所以除了你想要使用的位(除了__pos__之外)都有1。虽然0x00FF用于选择一对字节的最低字节,因为它只选择低8位。 – Jack 2010-04-16 23:45:12