将32位二进制字符串转换为字节

时间:2018-10-09 20:47:59

标签: java string casting binary byte

我正在使用FileInputStream一次读取一个字节,然后使用Integer.toBinaryString()将其转换为字符串,然后需要将其转换回一个字节。

这是我的问题:java使用32位字节,这意味着我的Integer.toBinaryString()返回的字符串的长度为32,而尝试将其转换回字节的过程中,我一直感到很沮丧,因为像Byte这样的方法.valueOf()等等,都抛出与该值超出字节范围的错误。

我想念什么吗?还是我需要开发自己的方法。

1 个答案:

答案 0 :(得分:0)

我找到了简单的答案:|

public class abc
{
    public static void main (String[] args)
    {
        byte b = -1;
        String binString = Integer.toBinaryString(b); //value 1111,1111,1111,1111,1111,1111,1111,1111
        new BigInteger(binString, 2).byteValue(); //value -1 
    }
}

它会截断binString,但这不会影响字节值,因为左侧的24位与字节实际上无关。

现在,在上面的示例中,我使用了BigInteger及其byteValue()方法,其原因以及为什么我不仅仅使用0xff解决方案是因为代码中的Integer.toBinaryString()上面的代码将返回一个长度为32的字符串数字(32 1),并且不能将其强制转换为int甚至是long,因为它的数字/值太大。结果,由于无法将其强制转换为int或long类型,因此无法执行类似&的操作,因此解决方案是在左侧修剪24位中的字符串,然后将较短的字符串转换/转换为int,这是BigInteger在上面的代码中所做的。

该字节仍将保持其值,因为该值仅包含在右侧的8位中(与字节的含义相同)。 Java有时会将添加的24位添加到8位字节中,这是出于Java自身的目的,可以根据需要将其忽略,例如示例,该问题产生了该线程。