我正在读取一种文件格式,该文件格式指定某些类型为无符号整数和短裤。读取值时,将它们作为字节数组获取。将它们转换为短裤/整数/多头的最佳途径是:
ByteBuffer wrapped = ByteBuffer.wrap(byteArray);
int x = wrapped.getInt();
Run Code Online (Sandbox Code Playgroud)
看起来很容易为未签名的int溢出。有没有更好的方法来处理这种情况?
更新:我应该提到我正在使用Groovy,所以我绝对不在乎是否必须使用a BigInteger或类似的东西。我只是想在保持价值不变的情况下获得最大的安全性。
带符号或无符号的32位值始终可以无损地存储在int*中。这意味着从数据安全的角度来看,您不必担心将无符号的值放在带符号的类型中。
bytes中的8位值,s中的16位值和shorts中的64位值也是如此long。
将无符号值读入相应的带符号类型后,可以将它们提升为较大类型的带符号值,以更轻松地使用预期值:
由于没有大于的原始类型long,您可以通过BigInteger进行操作,也可以使用便捷方法Long执行无符号操作:
*这是由于JVM要求整数类型必须是二进制补码。
| 归档时间: |
|
| 查看次数: |
551 次 |
| 最近记录: |