String.format() 中的 %d 适用于无符号整数吗?

10
printf() 中,我记得对于无符号整数需要使用 %u ... 但是我在 String.format() 的规范中找不到这样的格式化符号。
因此,如果我有一个较大的无符号整数,那么使用 %d 将能正确工作吗?

9
Java没有无符号整数。 - Kevin
Java 8有无符号整数。 - user235273
据我所知,Java 8具有用于常见解决无符号类型问题的API。 - Peter Lawrey
是的,Java 8有Integer.toUnsignedString()。看起来他们忘记添加%u了。 - Henno Vermeulen
1个回答

13

如果你想把 int 当作无符号数来处理,你可以这样做:

int i = ...
String s = String.format("%d", i & 0xFFFFFFFFL);

这实际上将有符号整数转换为长整型,但它的范围是从0到2^31-1。

要进行相反操作,您可以执行

int i = (int) Long.parseLong(s);
String s2 = String.format("%d", i & 0xFFFFFFFFL);

如果s2在范围内,那么s2将与s相同。

顺便说一下:最简单的方法可能是一开始就使用long。除非您正在创建大量这些,否则额外的内存微不足道,代码也更简单。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接