我正在尝试将一些C代码移植到Java,但是我一直在努力弄清楚这些代码的作用。
注意: rawEntry
的类型是 char*
,似乎是分配了 12 个字节的空间。
char *rawEntry = (char*)malloc(0x000c);
unsigned long *l;
unsigned long offset;
// ...
l = (unsigned long*) rawEntry + 1;
offset = ntohl(*l);
据我所知,它会取数组的前四个项,将它们组合成一个长整数,然而我的Java尝试并不成功。
offset = (rawEntry[0] << 24) +
(rawEntry[1] << 16) +
(rawEntry[2] << 8) +
(rawEntry[3]) +
1;
当面对以下数组时:
1 0 0 0 0 0 0 0 0 0 11 -38
这段C代码输出的偏移量为3034
我的Java代码输出16777217,或者在翻转字节序后输出1
rawEntry
可以是char *
或者char
数组,但不能同时存在。这个区别对于你的特定任务可能并不重要,但也有可能很重要。因为你没有给我们足够的信息,所以很难判断。 - John Bollinger