我有一个C#DNS加密算法现在想把它改成java,但是java字节是-128~127,C#是0~255
您的输入值都在0到127的范围内,因此没有问题 在输出上,但仅在完成所有计算后,您需要将我有一个C#DNS加密算法现在想把它改成java,但是java字节是-128~127,C#是0~255,java,Java,您的输入值都在0到127的范围内,因此没有问题 在输出上,但仅在完成所有计算后,您需要将字节值转换为int值,同时将两个补码负值转换为正值: java outData[i >> 3] and c# different 如果您按照上述方法输出数组的每个元素,您应该会发现得到的值与C代码匹配。您没有描述代码应该做什么(例如给出一些示例数字),因此我只能猜测 对于无符号数据,使用处理符号位的操作(>)是没有意义的,可能需要的操作是逻辑移位(>>) 这里有更多详细信息:我认为您需要使
字节
值转换为int
值,同时将两个补码负值转换为正值:
java outData[i >> 3] and c# different
如果您按照上述方法输出数组的每个元素,您应该会发现得到的值与C代码匹配。您没有描述代码应该做什么(例如给出一些示例数字),因此我只能猜测 对于无符号数据,使用处理符号位的操作(
>
)是没有意义的,可能需要的操作是逻辑移位(>>
)
这里有更多详细信息:我认为您需要使用操作符>>>而不是>>,当您的数字高于127时,可能会出现问题,它会变成负数。 好吧,这可能会帮助你:
干杯请显示示例输入和所需输出。没有任何右移是在“负数”上,因此没有必要使用
>>
而不是>
@Alnitak:您是对的,对于给定的输入值没有区别。我假设代码在全字节范围内应该是合适的。虽然通常在处理“未签名”数据时不使用>
是有意义的,但在OP的情况下,这并不能解决他的问题。根据我对其他答案之一的评论,使用右移运算符的数字都不在范围内0。。127
因此无需使用无符号移位运算符。但在应用运算符>>3次后,将使用无符号移位运算符。如果该数字>=32,则移动三位后变为128,这已经是一个负数。如果它是无符号字节,它将正常工作,但如果使用7位而不是8位,结果将不同。但这取决于函数应该做什么。不,再看一遍。只有两个右移-BitPMC1[i]>>3
和i>>3
。BitPMC1
数组是常量,仅包含值0..127
i
是循环计数器,从0开始。。55
。哪个值高于32huh?只有设置了位7的“有符号”值(即负数或“无符号”值>127)才会受到影响。32不包括在内。
java outData[i >> 3] and c# different
int unsigned_value = ((int)byte_value) & 0xff;