Java 如何从char[]数组转换为位集
我正在使用这个程序:Java 如何从char[]数组转换为位集,java,bitset,Java,Bitset,我正在使用这个程序: private static char[] toCharArray(final BitSet bs){ final int length = bs.length(); final char[] arr = new char[length]; for(int i = 0; i < length; i++){ arr[i] = bs.get(i) ? '1' : '0'; }
private static char[] toCharArray(final BitSet bs){
final int length = bs.length();
final char[] arr = new char[length];
for(int i = 0; i < length; i++){
arr[i] = bs.get(i) ? '1' : '0';
}
return arr;
}
private static char[]tocharray(最终位集bs){
最终整数长度=bs.length();
最终字符[]arr=新字符[长度];
对于(int i=0;i
将
位集
obj转换为char[]
数组。现在,在对char[]
(添加一些零)数组进行一些修改之后,我想将其转换回位集
obj。有没有办法 我不知道你为什么这么做,但为什么不改变你的方法呢
private static BitSet toBitset(final char[] entries){
final int length = entries.length;
BitSet bs = new BitSet(length);
for(int i = 0; i < length; i++){
bs.set(i, entries[i] == '1');
}
return bs;
}
将打印出10002
这可能会对您有所帮助(但您需要相应地编辑上述方法):
我不知道你为什么这么做,但为什么不改变你的方法呢
private static BitSet toBitset(final char[] entries){
final int length = entries.length;
BitSet bs = new BitSet(length);
for(int i = 0; i < length; i++){
bs.set(i, entries[i] == '1');
}
return bs;
}
将打印出10002
这可能会对您有所帮助(但您需要相应地编辑上述方法):
进行单元测试以完成类似的任务。得出以下结论:
BitSet bs = new BitSet(testArrayChar.length);
for (int y=0; y<testArrayChar.length; y++)
{
if(testArrayChar[y]=='0')
{
bs.set(y, false);
}
else if(testArrayChar[y]=='1')
{
bs.set(y, true);
}
}
位集bs=新位集(testArrayChar.length);
对于(int y=0;y,执行单元测试以完成类似任务。得出以下结论:
BitSet bs = new BitSet(testArrayChar.length);
for (int y=0; y<testArrayChar.length; y++)
{
if(testArrayChar[y]=='0')
{
bs.set(y, false);
}
else if(testArrayChar[y]=='1')
{
bs.set(y, true);
}
}
位集bs=新位集(testArrayChar.length);
对于(int y=0;yYes),我将明确说明我的观点:在SQL server中存储位(二进制数据)时,如果二进制值以0开头而不是1(删除1之前的所有0),则会丢失数据.现在,在检索数据之后,我需要在对其执行一些逻辑操作之前将这些零放回。转换为字符数组并返回也是如此。它不能正常工作。如果字符[]具有类似00010010的值。然后,当转换为位集时,长度变小,因为位集中不包括前3个零。例如,如果此字符[]的长度为8,则bs.length()仅为5。@JavaBits这不是真的,在本例中运行我的函数:public static void main(String[]args){String test=“00101010010000”;char[]array=test.toCharArray();BitSet first=BitSetTest.toBitset(数组);System.out.println(first.toString();}将给我一个输出{2,4,6,9}那是correct@JavaBits你应该告诉我们,你的意思是你的方法工作不正常!不是我的方法工作正常,而是关于不存储前面的0的位集类。希望我清楚。谢谢你的帮助。是的,我一定会澄清我的观点:在存储位(二进制数据)时在SQL server中,如果二进制值以0开头而不是1(删除1之前的所有0),则会丢失数据。现在,在检索数据之后,我需要将这些零放回,然后再对其执行一些逻辑操作。转换为字符数组并返回的转换也是如此。它无法正常工作。如果字符[]具有类似00010010的值。然后,当转换为位集时,长度变小,因为位集中不包括前3个零。例如,如果此字符[]的长度为8,则bs.length()仅为5。@JavaBits这不是真的,在本例中运行我的函数:public static void main(String[]args){String test=“00101010010000”;char[]array=test.toCharArray();BitSet first=BitSetTest.toBitset(数组);System.out.println(first.toString();}将给我一个输出{2,4,6,9}那是correct@JavaBits你应该告诉我们你的意思是你的方法工作不正常!不是我的方法工作正常,而是关于不存储前面的0的位集类。希望我说得清楚。谢谢你的帮助。
class FixedBitSet extends BitSet {
private int maxLength = 0;
public int maxLength(){
return maxLength;
}
@Override
public void set(int bitIndex, boolean value) {
super.set(bitIndex, value);
if(bitIndex > maxLength){
maxLength = bitIndex;
}
}
}
BitSet bs = new BitSet(testArrayChar.length);
for (int y=0; y<testArrayChar.length; y++)
{
if(testArrayChar[y]=='0')
{
bs.set(y, false);
}
else if(testArrayChar[y]=='1')
{
bs.set(y, true);
}
}