【发布时间】:2011-11-19 09:09:32
【问题描述】:
显然,Java 本身不支持无符号数字类型,and that's not going to change soon(cmets 从 2002 年开始)。但是,在使用数据库(例如 MySQL)时,它们可能会时不时地派上用场。关于如何模拟无符号数有很多问题。例如:
所有这些都从表面上描述了它可以如何完成。但是是否有任何库实际上一直在为UByte、UShort、UInteger、ULong 实现合适的包装器?最好,这些包装器将扩展 java.lang.Number 并提供类似于 java.math.BigInteger 的算术 API。
从this document 可以看出,有很多事情要考虑,也有很多可能出错(例如如何按位移位、如何乘法等),所以我不想自己做.另外,我不想只使用下一个更高的类型(例如Short 而不是Byte 等)。例如,为了与数据库进行最佳交互,我希望保留 8-bit、16-bit、32-bit、64-bit 号码的概念。
更新:
在你回答之前!考虑到我知道所有的解决方法,但我真的很想拥有完全具有上述属性的这 4 种类型。也许有人已经这样做了,所以这就是我问的原因。无需提醒我解决方法。
【问题讨论】:
-
所有关于玩unsigned-in-signed-land的比特捏造警告,没有“像数字一样的数字”通常足以让我拒绝。 Java 刚刚错过了一些领域,这就是其中之一。
-
@pst:我也有同感。在大多数情况下,我也被拒之门外。但在这种情况下,这样的图书馆真的是一种享受。
-
前段时间我遇到了 javolution 库,其中包含 Struct 类,其中包含 Uints 8-,16-,32-bit 的实现。
-
@87element:实际上,这是一个不错的库。不幸的是,在这种情况下,无符号数类既没有扩展
java.lang.Number,也没有提供算术方法......但仍然需要牢记...... -
@A.H.我知道 OpenHMS 的 SqlBuilder。不过,它似乎失去了吸引力。你会在这里找到更多类似的工具:stackoverflow.com/questions/1217228/…