快速将字节数组转换为相应的Integer

时间:2014-01-12 15:20:16

标签: java string integer bytearray

首先,这听起来像这里的问题: How to convert a byte array to its numeric value (Java)?

但我的Byte-Array的起源是一个字符串,如下所示:

byte[] foo = new byte[8];
foo = "12345678".getBytes();

是否有更快的方式(是的,它真的是这么快做)而不是 Integer.parseInt(new String(foo))? 字符串仅包含表示整数的数字。

2 个答案:

答案 0 :(得分:1)

试试这个

    int res = 0;
    for(int i = foo.length -1, m = 1; i >=0; i--, m *= 10) {
        res += (foo[i] & 0xF) * m; 
    }

答案 1 :(得分:1)

您可以尝试这样的事情:

byte foo[] = "12345678".getBytes();
//Since it is an 'integer' essentially, it will contain ASCII values of decimal digits.
long num = 0;  //Store number here.
for(int i = foo.length - 1; i >= 0; i--)
{
    num = num * 10 + (foo[i] - '0'); // or (foo[i] - 48) or (foo[i] & 0xf)
}

num存储所需的号码。

预防措施:请确保仅使用十进制数字。


修改

<机构

在致电getBytes() String的{​​{1}}时,返回的"12345678"如下:

enter image description here

我们看到的值是等效字符的 ASCII Unicode 值。 有几种方法可以将它们的等效字符提取为byte[] s:

  1. 由于数字int的排列,即'0','1','2'等以所需的顺序完成 - 升序和顺序,我们可以通过分割 ASCII chars即48。
  2. @Evgeniy Dorofeev正确地指出了 masking 的方法:
  3.   

    '0'=&gt; 48 =&gt; 11 0000

    我们注意到,如果我们提取最后4位,我们会得到所需的'0'。 为此,我们需要以下列方式提取它们。 我们来int,即50

    foo[1]

    因此,获得所需的数字。它必须以 50 & 0xf (original) = 50 & 15 (in Decimal) = 11 0010 & 1111 (in Binary) = 0010 (result) = 2 (Decimal) add以正确的方式(我期望每个程序员都有一些知识)。