java - 移植C代码;需要有关按位运算和指针语法的帮助

标签 java c pointers bit-manipulation porting

我有一些 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/

相关文章:

使用 __VA_ARGS__ 转换在 MACRO 中传递的所有参数

c++ - 将指针转换为数组(int* 到 int[2])

c++ - 这些模板可以明确吗

c - 读取数据文件并保存到C中的数组

c - 为什么打印 unsigned char 会输出这么大的数字?

c - main 中的不可移植指针赋值

Java 文本字段焦点

java - 在 Java 中从 WebService 调用并行进程

java - 在 switch-case 中使用枚举值的字符串表示

java - 将二次曲线转换为多边形链