移植C代码; 需要按位操作和指针语法的帮助

big*_*ben 0 c java porting pointers bit-manipulation

我有一些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;
}
Run Code Online (Sandbox Code Playgroud)

该函数用作:

char * position = //some data

/*the included comment on this next line states its the size of a string*/
int i = reverse_integer( *(int*)position ) 
Run Code Online (Sandbox Code Playgroud)

小智 7

我很乐意发布与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);
   }

请注意,循环没有意义 - int在Java中总是4个字节.还要注意表达式的三重直角括号,以执行无符号右移.

现在出于不使用它的原因:

1 - 该功能已存在 - 请参阅 Integer.reverseBytes(int)

2 - 您将很难使用该示例代码,因为Java不允许您像其他任何东西一样投射字节数组.Java是官方的big-endian(最重要的字节优先),所以如果你从文件中读取字节,那么你可以java.io.DataInputStream用来提取int,long等.


Dre*_*ann 5

它正在反转整数的字节顺序(字节顺序).

程序员似乎也有一个错误3,假设它会sizeof(int) - 1.