当前位置: 首页 > 面试题库 >

用Java将字节转换为二进制

龙才俊
2023-03-14
问题内容

我正在尝试将字节值转换为二进制以进行数据传输。基本上,我要在字节数组(“ 10101100”是单个字节)中以二进制(“ 10101100”)的形式发送类似“
AC”的值。我希望能够接收此字节并将其转换回“ 10101100”。截至目前,我还没有成功,完全不知道从哪里开始。任何帮助都会很棒。

编辑 :对所有混乱,抱歉,我没有意识到我忘记添加特定的细节。

基本上,我需要使用字节数组通过套接字连接发送二进制值。我可以这样做,但我不知道如何转换值并使它们正确显示。这是一个例子:

我需要发送十六进制值ACDE48并能够将其解释回去。根据文档,我必须通过以下方式将其转换为二进制:byte [] b =
{10101100,11011110,01001000},其中数组中的每个位置都可以容纳2个值。然后,在发送和接收这些值之后,我需要将它们转换回去。我不确定该怎么做。


问题答案:
String toBinary( byte[] bytes )
{
    StringBuilder sb = new StringBuilder(bytes.length * Byte.SIZE);
    for( int i = 0; i < Byte.SIZE * bytes.length; i++ )
        sb.append((bytes[i / Byte.SIZE] << i % Byte.SIZE & 0x80) == 0 ? '0' : '1');
    return sb.toString();
}

byte[] fromBinary( String s )
{
    int sLen = s.length();
    byte[] toReturn = new byte[(sLen + Byte.SIZE - 1) / Byte.SIZE];
    char c;
    for( int i = 0; i < sLen; i++ )
        if( (c = s.charAt(i)) == '1' )
            toReturn[i / Byte.SIZE] = (byte) (toReturn[i / Byte.SIZE] | (0x80 >>> (i % Byte.SIZE)));
        else if ( c != '0' )
            throw new IllegalArgumentException();
    return toReturn;
}

也有一些更简单的方法来处理此问题(假定为大字节序)。

Integer.parseInt(hex, 16);
Integer.parseInt(binary, 2);

Integer.toHexString(byte).subString((Integer.SIZE - Byte.SIZE) / 4);
Integer.toBinaryString(byte).substring(Integer.SIZE - Byte.SIZE);


 类似资料:
  • 我使用这个网站哈希:https://cryptii.com/hash-function

  • 假设我有以下字符串: 如何将其转换为二进制数(0和1)?诀窍在于:我不允许使用内置方法进行转换。这必须用数学方法来完成。我不知道从哪里开始。谁能给我指出正确的方向吗? 编辑1:我看过这个问题,人们建议使用getBytes(字符串)、字符集UTF-8,我nteger.toBinaryString。我不允许使用任何这些方法进行转换。我也没听说过36垒。

  • 我如何将一个写为二进制的字符串转换为二进制(字节数组)? 如果我有一个字符串: 下面是当我将二进制设置为字节数组时发生的情况(字节数组返回48,这是ASCII) 我不擅长解释,所以希望上面的例子足以告诉你我想要什么。

  • 我的情况是,我有一个C类(MyClass),其方法具有以下签名: 其中name是in参数,serialized是out参数。 我通过在“I”文件中进行%extend和%ignore声明来实现它,如下所示: 因此,可以使用类似Java的方法: 但现在我遇到了一个问题,序列化的std::字符串包含二进制数据,包括表示C字符串结尾的“\0”字符,实际上以下代码显示了C中的问题: 上述代码显示: 正如我在

  • 问题内容: 我有一个字节数组。我希望将该数组的每个字节String转换为其对应的十六进制值。 Java中是否有任何函数可以将字节数组转换为十六进制? 问题答案: 也可以看看 java.util.Formatter syntax %[flags][width]conversion Flag ‘0’ - The result will be zero-padded Width 2 Conversion

  • 问题内容: 我有一个很大的二进制字符串“ 101101110 …”,并且正在尝试将其存储到字节数组中。最好的方法是什么? 可以说我有largeString =“ 0100111010111011011011000000001000110101” 我正在寻找的结果: [78,187,96,17,21] 01001110 10111011 01100000 00010001 10101 我试过的 但是