Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从char[]数组转换为位集_Java_Bitset - Fatal编程技术网

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);
    }
}