Converting long[64] to byte[512] in Java?

会有一股神秘感。 提交于 2019-11-28 00:44:18
trashgod

ByteBuffer works well for this: just put in 64 long values and get a byte[] out using the array() method. The ByteOrder class can handle endian issues effectively. For example, incorporating the approach suggested in a comment by 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();
}

Addendum: The resulting byte[] components are signed, 8-bit values, but Java arrays require nonnegative integer index values. Casting a byte to an int will result in sign extension, but masking the higher order bits will give the unsigned value of byte b:

int i = (int) b & 0xFF;

This answer elaborates on the applicable operator precedence rules. This related answer demonstrates a similar approach for double values.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!