在Java中将long 转换为byte ?

我正在将进程移植到Java。 已经有了C#和C ++的工作版本。

我在C#中有一个部分,我做Marshal.Copy(…)将64个ulongs转换为512个字节,而C ++中的那行我使用memmove(…)来做同样的事情。 Java中有哪些可以实现相同的结果? 我需要相同的二进制信息,就像字节而不是long一样。

编辑:

我移植到Java的原因是利用Java自然具有的可移植性。 我不想使用本机代码。

另一件事。 由于Java不包含无符号值,因此我需要稍微改变一下我要求的内容。 我想从64个long(C#和C ++中的ulongs)中的每一个获得8个无符号字节值,以便稍后我可以在数组中的索引处使用这些值。 这需要发生数千次,因此最快的方式将是最好的方式。

ByteBuffer适用于此:只需输入64个long值并使用array()方法获取byte[]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(); } 

附录:生成的byte[]组件是有符号的8位值,但Java数组需要非负整数索引值 。 将byte转换为int将导致符号扩展,但屏蔽较高位的位将给出byte b的无符号值:

 int i = (int) b & 0xFF; 

此答案详细说明了适用的运算符优先级规则。 此相关答案演示了double值的类似方法。