【发布时间】:2017-04-03 15:20:21
【问题描述】:
我在 Objective-C 中有这段代码,我想用 Java 编写它。然而,(-(crc & 1)) 的声明给我带来了问题。经过一些谷歌搜索后,似乎无符号的负数通常没有很好地定义。不过我不太明白。也许知道 CRC 的人可以告诉我 Java 中的等价物是什么。
我需要一个与具有此 Objective-C 代码的设备完全相同的方法来检查我计算的 crc 与它自己计算的。
+ (UInt32) crc32:(UInt32) crc ofByte: (UInt8) byte
{
int8_t i;
crc = crc ^ byte;
for (i = 7; i >= 0; i--)
{
crc = (crc >> 1) ^ (0xedb88320ul & (-(crc & 1)));
}
return(crc);
}
在 cmets 的帮助下解决的代码。好像是我找错地方了。
private void addByteToCRC(byte oneByte) {
crc ^= oneByte & 0xFF;
for (int i = 7; i >= 0; i--)
{
crc = (crc >>> 1) ^ (0xedb88320 & (-(crc & 1)));
}
}
两个校验和都以 0xFFFFFFFF 的 crc 值开始。
【问题讨论】:
-
“无符号的负数通常没有很好的定义” - 定义得很好:一个 unsigned 整数不能是负数。就是这样。
-
是的,我明白了。所以问题是这个程序实际上在做什么的等价物。因为它正在工作。
-
我们不是代码翻译服务。
-
如果你能告诉我它的作用,我也很高兴我自己编程。
-
-(crc & 1)技巧仅在设置了底部位时才用于与 0xedb88320 进行异或。在 Java 中也是如此。
标签: java objective-c crc