我有一个C#DNS加密算法现在想把它改成java,但是java字节是-128~127,C#是0~255


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 中制作无符号字节吗

干杯

相关内容

最新更新