如何将字符串转换为位(bit),然后转换为整数数组 - Java

5

如何将字符串转换为位(而不是字节)或位数组,在Java中进行一些操作,如何转换为整数数组(每32位转换为整数,然后将其放入数组中?我从未在Java中进行过这种转换。

String->array of bits->(some operations I'll handle them)->array of ints

3
请提供更多关于你在做什么的细节。 - Wug
1
如果被要求提供更多细节,那就意味着需要更多的信息。 - Louis Wasserman
在Java中,不存在所谓的“位数组”。 - Marko Topolnik
@Wug 由于OP没有提供帮助,我猜他想要一个比特流,然后将其转换为另一个比特流。 - Marko Topolnik
@LouisWasserman 我的意思正是如此。虽然如此,OP确实想要它。当然,在Java中没有任何阻止我们制定比特流抽象的东西。 - Marko Topolnik
显示剩余5条评论
7个回答

9
ByteBuffer bytes = ByteBuffer.wrap(string.getBytes(charset));
  // you must specify a charset
IntBuffer ints = bytes.asIntBuffer();
int numInts = ints.remaining();
int[] result = new int[numInts];
ints.get(result);

谢谢。我会尽快检查它。看起来很有前途。(如果它提供的是位而不是字节) - Yoda
就像我在其他评论中所说的,实际上没有办法在Java中只获取位而不是获取字节、整数或更大的数据类型。(尽管如此,可以轻松地从字节中提取位。) - Louis Wasserman

2

THIS IS THE ANSWER

String s = "foo";
      byte[] bytes = s.getBytes();
      StringBuilder binary = new StringBuilder();
      for (byte b : bytes)
      {
         int val = b;
         for (int i = 0; i < 8; i++)
         {
            binary.append((val & 128) == 0 ? 0 : 1);
            val <<= 1;
         }
      //   binary.append(' ');
      }
      System.out.println("'" + s + "' to binary: " + binary);

0
也许你可以跳过字符串转换为位,直接将其转换为整数数组(如果你想要每个字符的UNICODE值),使用s.toCharArray(),其中s是一个String变量。

不,我不想将它转换为整数。我需要先对位进行一些操作(添加一些位)。 - Yoda

0

您正在寻找this

string.getBytes();

不是列表,而是数组,但您可以稍后使用它,甚至将其转换为整数。


在Java中,您无法获取纯位(bit)。您只能以“批量”的方式获取它们,如字节(bytes)、整数(ints)等。 - Louis Wasserman
1
认真的说,你不能从字节中获取位吗? :) - Matzi

0
这将把“abc”转换为字节,然后代码将以相应的ASCII码(即97 98 99)打印“abc”。
byte a[]=new byte[160];
String s="abc";
a=s.getBytes();
for(int i=0;i<s.length();i++)
{
    System.out.print(a[i]+" ");
}

我知道那些东西。我需要的是比特 -> 10101010101 这种的 ;) - Yoda

0

可能是这样(我当前的电脑没有编译器,无法测试是否可行,但它可能会对您有所帮助):

String st="this is a string";
byte[] bytes=st.getBytes();
List<Integer> ints=new ArrayList<Integer>();
ints.addAll(bytes);

如果编译器失败了

ints.addAll(bytes);

你可以用它来替换

for (int i=0;i<bytes.length();i++){
   ints.add(bytes[i]);
}

如果你想要精确获取数组:

ints.toArray();

抱歉,我误解了您的意思。您想获取位(bit)。 - MikhailSP

0
请注意,字符串是字符序列,在Java中,每个char数据类型都是一个单独的16位Unicode字符。它的最小值为'\u0000'(或0),最大值为'\uffff'(或65,535包括在内)。要获取char整数值,请执行以下操作:
    String str="test";
    String tmp="";

    int result[]=new int[str.length()/2+str.length()%2];
    int count=0;

    for(char c:str.toCharArray()) {
         tmp+=Integer.toBinaryString((int)c);
         if(tmp.length()==14) {
            result[count++]=Integer.valueOf(tmp,2);
            //System.out.println(tmp+":"+result[count-1]);
            tmp="";
         }
    }

    for(int i:result) {
        System.out.print(i+" ");
    }

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