-5
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
4

3 回答 3

1

您的输入值都在 0..127 范围内,所以那里没有问题。

在输出上,但只有在完成所有计算之后,您需要将byte值转换为int值,同时还将二进制补码负值转换为正值:

int unsigned_value = ((int)byte_value) & 0xff;

如果您按照上述方法输出数组的每个元素,您应该会发现您得到的值与您的 C# 代码相匹配。

于 2013-10-24T10:02:41.053 回答
0

您没有描述您的代码应该做什么(例如给出一些示例数字),因此我只能猜测。

有无符号数据,使用处理符号位的操作 ( >>) 没有意义,可能您需要的操作是逻辑移位 ( >>>)

更多细节在这里:>>>和>>之间的区别

于 2013-10-24T10:08:38.920 回答
-1

我认为您需要使用运算符 >>> 而不是 >>,当您的数字高于 127 时,您可能会遇到问题,它会变成负数。好吧,这可能会对您有所帮助: 我们可以在 Java 中制作无符号字节吗

干杯

于 2013-10-24T10:26:58.693 回答