0

我有这样的字符串

String text = "f001050000000000003d61c1c1df400200c0000009181600ef014000003f20"

我将其转换为字节以将其作为字节循环

byte[] bytes = new BigInteger(text,16).toByteArray();        
    for (int i = 0; i < bytes.length; i++) 
    {            
        System.out.print(String.format("%02x ", bytes[i]));
    }

但是当我打印数组值时,它会00在实际字符串的开头添加字节!它应该以开头,f0但它以00!

当我开始索引时,1这个00消失了。这00是从哪里来的!?

4

2 回答 2

4

BigInteger#toByteArray() 的 JavaDoc状态:

返回包含此 BigInteger的二进制补码表示的字节数组。字节数组将采用大端字节序:最高有效字节位于第零个元素中。该数组将包含表示此 BigInteger 所需的最小字节数,包括至少一个符号位,即(ceil((this.bitLength() + 1)/8)).[...]

由于您有一个正数,因此二进制补码中的第一位将为零。

于 2013-01-31T00:04:04.127 回答
1

我认为 BigInteger 不适合这项任务。你需要自己解析你的文本,这并不难

    byte[] bytes = new byte[text.length() / 2];
    for (int i = 0; i < bytes.length; i++) {
        bytes[i] = (byte) ((Character.digit(text.charAt(i * 2), 16) << 4) + Character.digit(text.charAt(i * 2 + 1), 16));
    }

并不是说它也正确转换了“0000f0 ...”,而是BigInteger会截断前导零(标准化),因为对于BigInteger来说它只是一个数字

于 2013-01-31T05:35:06.823 回答