我有一些 C 代码想移植到 java。我没有做太多 C 编码,但我能够跟进直到这个函数。如果有人可以帮助我了解发生了什么,将不胜感激。
int reverse_integer(int input) {
int output = 0, i;
for ( i=0, i<sizeof(int); i++ ) {
output = ( input & 0x000000FF ) | output;
input >>= 8;
if ( i < 3 ) {
output <<= 8;
}
}
return output;
}
函数是这样使用的:
char * position = //some data
/*the included comment on this next line states its the size of a string*/
int i = reverse_integer( *(int*)position )
最佳答案
我很乐意发布与 C 代码功能相同的 Java 代码,但前提是您保证不使用它。
/** Reverses the bytes in an integer. */ public static int reverseInteger(int input) { return (input >>> 24) | (input >> 8) & 0x0000ff00 | (input << 8) & 0x00ff0000 | (input << 24); }
请注意,循环没有意义 - Java 中的 int
始终为 4 个字节。另请注意表达式开头的三个右尖括号,以执行无符号右移。
现在不使用它的原因:
1 - 该函数已经存在 - 请参阅 Integer.reverseBytes(int)
2 - 您将很难使用该示例代码,因为 Java 不允许您将字节数组转换为其他任何内容。 Java 是正式的 big-endian(最重要的字节在前),所以如果您从文件中读取字节,那么您可以使用 java.io.DataInputStream
来提取 ints、longs 等。
关于java - 移植C代码;需要有关按位运算和指针语法的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1895131/