在Java中将boolean[]转换为String,反之亦然

3
如何将布尔数组(或BitSet)转换为字符串,反之亦然。
示例:
boolean[] ar = {true,false,false,false,false};
print(BitArrayToString(ar));

应该返回以下之一。
10000 //binary
16 //decimal
10 //hex, prefered

另一个方向也应该可以工作。
ar = StringToBitArray(BitArrayToString(ar));
2个回答

3
long bitSetInt = 0;
for (int i = 0 ; i < ar.length ; i++) {
   bitSetInt = (bitSetInt | toDigit(ar[i])) << 1;
}
println(String.format("%x", bitSetInt));

where

int toDigit(boolean b) { return b?1:0;}

只要ar数组的大小小于long类型的大小,这个方法就有效。其他格式化需求请参考http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html#syntax

1
不错的解决方案,但我不知道如何进行反向操作,长尺寸限制可能会成为一个问题。 - michiel
因为这看起来像是作业,所以我没有提供完整的解决方案 - 只有一半。请思考一下 - 将数字转换为布尔数组非常容易。(是的,long类型的大小限制确实是一个问题,但问题并没有规定最大大小...) - Chii
我已经通过对每个64位块运行代码并连接字符串来解决了大小限制的问题。感谢您的帮助。 - michiel
如果是这种情况,最好只执行一个循环,并使用BigDecimal(而不是进行位移操作)。 - Chii

2

好的,你可以这样做:

StringBuilder builder = new StringBuilder();
for (int i = 0; i < array.length; i++) {
    if (array[i]) builder.append("1"); else builder.append("0");
}
return builder.toString();

这个方案可以工作,但使用的空间比十六进制方案多得多。 - michiel

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