我正在将进程移植到Java.已经有了C#和C++的工作版本.
我在C#中有一个部分,我使用Marshal.Copy(...)将64个字节转换为512个字节,并在C++中使用memmove(...)来执行相同的操作.Java中有哪些可以实现相同的结果?我需要相同顺序的二进制信息,就像字节而不是long一样.
编辑:
我移植到Java的原因是利用Java自然具有的可移植性.我不想使用本机代码.
另一件事.由于Java不包含无符号值,因此我需要稍微更改我正在请求的内容.我想从64个long(C#和C++中的ulongs)中的每一个获得8个无符号字节值,以便稍后我可以在数组中的索引处使用这些值.这需要发生数千次,因此最快的方式将是最好的方式.
tra*_*god 20
ByteBuffer适用于此:只需输入64个long值,然后byte[]使用该array()方法.本ByteOrder类可以有效地处理端的问题.例如,结合wierob评论中建议的方法:
private static byte[] xform(long[] la, ByteOrder order) {
ByteBuffer bb = ByteBuffer.allocate(la.length * 8);
bb.order(order);
bb.asLongBuffer().put(la);
return bb.array();
}
Run Code Online (Sandbox Code Playgroud)
附录:生成的byte[]组件是有符号的8位值,但Java数组需要非负整数索引值.将a byte转换为int将导致符号扩展,但屏蔽高阶位将给出无符号值byte b:
int i = (int) b & 0xFF;
Run Code Online (Sandbox Code Playgroud)
此答案详细说明了适用的运算符优先级规则.这个相关的答案展示了类似的double价值观方法.
| 归档时间: |
|
| 查看次数: |
3158 次 |
| 最近记录: |