【问题标题】:Java equivalent of ntohll functionntohll 函数的 Java 等价物
【发布时间】:2023-04-10 16:59:01
【问题描述】:

Java 中是否有与ntohll C++ 函数等效的函数?

ntohll 的引用可以在这里找到:ntohll function

问题是我需要将 64 位长从 TCP/IP 网络顺序转换为小端长。

【问题讨论】:

  • @Maxbester 为什么需要这个功能?与在 java 中一样,您不需要关心网络字节顺序。
  • 阿帕奇公地EndianUtils
  • Java 没有无符号的 64 位整数类型......你到底需要用它做什么?
  • 我认为你必须逐个字节地重新设计。假设 11101111 10011001 ->11110111 10011001

标签: java c++ type-conversion endianness


【解决方案1】:

ntohll的java等效函数是:long相当于64位

    import java.nio.ByteBuffer;
    import java.nio.ByteOrder;

   public long ntohll(long convert)
    {
            ByteBuffer bbuf = ByteBuffer.allocate(8);  
            bbuf.order(ByteOrder.BIG_ENDIAN);  
            bbuf.putLong(convert);  
            bbuf.order(ByteOrder.LITTLE_ENDIAN);  
            return bbuf.getLong(0); 
    }

【讨论】:

  • 这相当于下面 Zac Howland 的回答,但他的版本更快。
【解决方案2】:

Java 已经使用网络字节顺序,因此无需转换它们(这就是 Java 中不存在这些函数的原因)。

更新

由于您正在读取小端位模式的文件,因此如果您使用的是 JDK reverseBytes 方法:

long data = Long.reverseBytes(some_data);

【讨论】:

  • 查看我对user3200809的评论,我需要读取一个由C++程序编写的文件,而C++程序尚未完成转换。
猜你喜欢
  • 1970-01-01
  • 2011-05-28
  • 2012-06-03
  • 2013-01-15
  • 1970-01-01
  • 2010-11-13
  • 2019-11-03
  • 2011-01-16
  • 1970-01-01
相关资源
最近更新 更多