java 字节移位_帮助实现目标c-java字节移位

所有字节移位操作都有问题。Java代码正在生产中,无法修改。既然这双似乎是最广泛的我会张贴它。

从objC发送:

-(void)putDouble:(NSNumber *)v{

unsigned long long n = [v unsignedLongLongValue];

dataToSend = [NSMutableData data];

long long i = (int)n & 0x0ff;

[dataToSend appendData:[NSMutableData dataWithBytes:&i length:sizeof(n)]];

i = ((int)n >> 8) & 0x0ff;

[dataToSend appendData:[NSMutableData dataWithBytes:&i length:sizeof(n)]];

i = ((int)n >> 16) & 0x0ff;

[dataToSend appendData:[NSMutableData dataWithBytes:&i length:sizeof(n)]];

i = ((int)n >> 24) & 0x0ff;

[dataToSend appendData:[NSMutableData dataWithBytes:&i length:sizeof(n)]];

i = ((int)n >> 32) & 0x0ff;

[dataToSend appendData:[NSMutableData dataWithBytes:&i length:sizeof(i)]];

i = ((int)n >> 40) & 0x0ff;

[dataToSend appendData:[NSMutableData dataWithBytes:&i length:sizeof(i)]];

i = ((int)n >> 48) & 0x0ff;

[dataToSend appendData:[NSMutableData dataWithBytes:&i length:sizeof(i)]];

i = ((int)n >> 56) & 0x0ff;

[dataToSend appendData:[NSMutableData dataWithBytes:&i length:sizeof(i)]];

[self send:dataToSend];

}

Java接收:

/*

* Retrieve a double (64-bit) number from the stream.

*/

private double getDouble() throws IOException

{

byte[] buffer = getBytes(8);

long bits =

((long)buffer[0] & 0x0ff) |

(((long)buffer[1] & 0x0ff) << 8) |

(((long)buffer[2] & 0x0ff) << 16) |

(((long)buffer[3] & 0x0ff) << 24) |

(((long)buffer[4] & 0x0ff) << 32) |

(((long)buffer[5] & 0x0ff) << 40) |

(((long)buffer[6] & 0x0ff) << 48) |

(((long)buffer[7] & 0x0ff) << 56);

return Double.longBitsToDouble(bits);

}

java获得双5.53E-322

问题出在objC方面,因为java正在与其他开发环境一起生产。对于所有生产客户机-13456.134是转换后的结果。

以下是java客户机使用的sendDouble代码:`

// Write a double (64-bit) number to the stream.

private void putDouble(double number) throws IOException

{

long n = Double.doubleToLongBits(number);

// have to write these in reverse order to be comptible

stream.write((int)(n) & 0x0ff);

stream.write((int)((n >>> 8)) & 0x0ff);

stream.write((int)((n >>> 16)) & 0x0ff);

stream.write((int)((n >>> 24)) & 0x0ff);

stream.write((int)((n >>> 32)) & 0x0ff);

stream.write((int)((n >>> 40)) & 0x0ff);

stream.write((int)((n >>> 48)) & 0x0ff);

stream.write((int)((n >>> 56)) & 0x0ff);

}

//--------------------------------------------------------------------------------

`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值