首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C /C++ long long到Java long

C /C++ long long到Java long
EN

Stack Overflow用户
提问于 2011-02-09 20:25:07
回答 3查看 3.2K关注 0票数 1

我在磁盘上有一个我正在读的文件,它是用c/c++代码写的。我知道我有两个64位无符号整数要读取,但是Java不支持无符号整数,所以我在执行DataInputStream.readLong()时得到的值是不正确的。(暂时忽略字节顺序,实际上我使用的是从网上下载的名为LEDataInputStream的DIS的派生程序)

这里有很多关于使用BigInteger的帖子,但是用于读取字节数组的javadoc只提到了加载一个字节数组重新表示,而且问题似乎集中在这样一个事实上,即一些人正在超越java long类型的积极界限,我将远远不能理解我正在读取的数据。

我有一个MATLab/Octave脚本,它将这些长整型值分别读取为两个32位整数,然后进行一些乘法和加法运算,以得到它想要的结果。

我想问题是-如何使用BigInteger或LEDataInputStream.XXX读取64位无符号整数?

提前感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-09 20:35:09

我建议使用ByteBuffer,然后使用诸如this之类的代码来获得您想要的内容。

票数 3
EN

Stack Overflow用户

发布于 2011-02-09 20:46:01

您可以使用long作为64位值来存储无符号数据。下面的模块展示了大多数Unsigned操作都可以使用标准的long类型来执行。这真的取决于你想对这个值做什么,因为这是否有问题。

编辑:处理无符号数字的一种常见方法是扩大数据类型。这在许多情况下更简单,但不是必需的(对于long来说,使用BigInteger并不会让事情变得更简单)

EDIT2:下面的代码有什么问题?

代码语言:javascript
复制
long max_unsigned = 0xFFFFFFFFFFFFFFFFl;
long min_unsigned = 0;
System.out.println(Unsigned.asString(max_unsigned) + " > "
        + Unsigned.asString(min_unsigned) + " is "
        + Unsigned.gt(max_unsigned, min_unsigned));

打印

代码语言:javascript
复制
18446744073709551615 > 0 is true
票数 1
EN

Stack Overflow用户

发布于 2011-02-09 20:37:32

首先,您可以查看this question

另请参阅this

现在使用BigInteger类

代码语言:javascript
复制
// Get a byte array
byte[] bytes = new byte[]{(byte)0x12, (byte)0x0F, (byte)0xF0};

// Create a BigInteger using the byte array
BigInteger bi = new BigInteger(bytes);

// Format to binary
String s = bi.toString(2);      // 100100000111111110000

// Format to octal
s = bi.toString(8);             // 4407760

// Format to decimal
s = bi.toString();              // 1183728

// Format to hexadecimal
s = bi.toString(16);            // 120ff0
if (s.length() % 2 != 0) {
    // Pad with 0
    s = "0"+s;
}


// Parse binary string
bi = new BigInteger("100100000111111110000", 2);

// Parse octal string
bi = new BigInteger("4407760", 8);

// Parse decimal string
bi = new BigInteger("1183728");

// Parse hexadecimal string
bi = new BigInteger("120ff0", 16);

// Get byte array
bytes = bi.toByteArray();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4944789

复制
相关文章

相似问题

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