private static final byte[] BitPMC1 = { 56, 48, 40, 32, 24, 16, 8, 0, 57,
49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51,
43, 35, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13,
5, 60, 52, 44, 36, 28, 20, 12, 4, 27, 19, 11, 3 };
byte[] outData= new byte[] { 0, 0, 0, 0, 0, 0, 0 };
for (int i = 0; i < 56; i++) {
if ((inData[BitPMC1[i] >> 3] & (1 << (7 - (BitPMC1[i] & 0x07)))) != 0) {
outData[i >> 3] |= (1 << (7 - (i & 0x07)));
}
}
java outData[i >> 3] and c# different
您的输入值都在 0..127 范围内,因此没有问题。
在输出上,但只有在完成所有计算之后,您才需要将byte
值转换为int
值,同时将二进制补码负值转换为正值:
int unsigned_value = ((int)byte_value) & 0xff;
如果按照上述内容输出数组的每个元素,则应发现获取的值与 C# 代码匹配。
你没有描述你的代码应该做什么(例如给出一些示例数字),所以我只能猜测。
对于无符号数据,使用处理符号位的操作(>>
)是没有意义的,可能需要的操作是逻辑转换(>>>
)
更多详细信息:>>>和>>之间的区别
我认为您需要使用运算符>>>而不是>>,当您的数字高于 127 时,您可能会遇到问题,它会变成负数。好吧,这可能会对您有所帮助:我们可以在 Java 中制作无符号字节吗
干杯