首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中将long[64]转换为byte[512]?

在Java中将long[64]转换为byte[512]?
EN

Stack Overflow用户
提问于 2010-02-06 11:41:11
回答 1查看 3.5K关注 0票数 17

我正在将一个进程移植到Java上。C#和C++已经有了可用的版本。

我在C#中有一个Marshal.Copy(...)为了将64个ulong转换为512个字节,我在C++中使用了memmove(...)做同样的事情。在Java中有什么可以实现相同的结果?我需要相同的二进制信息,顺序与字节相同,而不是长整型。

编辑:

我之所以移植到Java,是为了利用Java自然具有的可移植性。我不喜欢使用本机代码。

还有一件事。因为Java不包含无符号值,所以我需要稍微修改一下我请求的内容。我想从64个longs ( C#和C++中的ulong)中的每一个获得8个无符号的字节值,这样我以后就可以在数组中的索引处使用这些值。这需要发生数千次,所以最快的方法将是最好的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-02-06 12:13:44

ByteBuffer可以很好地做到这一点:只需输入64个long值,然后使用array()方法获取byte[]即可。ByteOrder类可以有效地处理字节顺序问题。例如,结合wierob评论中建议的方法

代码语言:javascript
复制
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数组需要nonnegative integer index values。将byte转换为int将导致符号扩展,但掩码较高阶位将得到byte b的无符号值

代码语言:javascript
复制
int i = (int) b & 0xFF;

answer详细说明了适用的运算符优先规则。这个相关的answer演示了处理double值的类似方法。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2211927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档