13

我有一串一和零,我想将其转换为字节数组。

例如,String b = "0110100001101001"如何将其转换byte[]为长度为 2 的?

4

3 回答 3

25

将其解析为以 2 为底的整数,然后转换为字节数组。事实上,既然你有 16 位,是时候打破很少使用的short.

short a = Short.parseShort(b, 2);
ByteBuffer bytes = ByteBuffer.allocate(2).putShort(a);

byte[] array = bytes.array();
于 2013-07-18T15:12:09.000 回答
23

另一种简单的方法是:

String b = "0110100001101001";
byte[] bval = new BigInteger(b, 2).toByteArray();
于 2013-07-18T15:27:33.407 回答
2

假设您的二进制字符串可以在不休息的情况下除以 8,您可以使用以下方法:

/**
 * Get an byte array by binary string
 * @param binaryString the string representing a byte
 * @return an byte array
 */
public static byte[] getByteByString(String binaryString){
    Iterable iterable = Splitter.fixedLength(8).split(binaryString);
    byte[] ret = new byte[Iterables.size(iterable) ];
    Iterator iterator = iterable.iterator();
    int i = 0;
    while (iterator.hasNext()) {
        Integer byteAsInt = Integer.parseInt(iterator.next().toString(), 2);
        ret[i] = byteAsInt.byteValue();
        i++;
    }
    return ret;
}

不要忘记将番石榴库添加到您的依赖项中。

在 Android 中,您应该添加到应用程序 gradle:

compile group: 'com.google.guava', name: 'guava', version: '19.0'

并将其添加到项目 gradle 中:

allprojects {
    repositories {
        mavenCentral()
    }
}

更新 1

这篇文章包含一个不使用 Guava Lib 的解决方案。

于 2016-11-28T10:06:58.857 回答