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等.
| 归档时间: |
|
| 查看次数: |
1798 次 |
| 最近记录: |