2011-02-25 55 views
1

任何人都知道如何在java中将大量字节(例如1000字节)转换为int/long等?将字节转换为int,反之亦然

+6

int是32位(4字节),long是64位(8字节)。你会如何处理996(或992)其他字节的数组?你真的想做什么? – 2011-02-25 16:44:21

回答

2

您可以使用一个循环

byte[] bytes = 
int[] ints = new int[bytes.length]; 
for(int i=0;i<bytes.length;i++) 
    ints[i] = bytes[i]; 

一个1000元最多可能需要10微秒这种方式。

+2

远远少于现代PC上的。 – 2011-02-25 16:49:12

+0

是真实的,但如果10微秒听起来不是很长时间,那么它并不重要。 ;) – 2011-02-25 16:50:44

2

要将byte转换为Java中的int,你有两个选择:

byte val = 0xff; 
int a = val;   // a == -1 
int b = (val & 0xff); // b == 0xff 

有Java库都没法阵列从一个原始类型转换为另一种,你必须手动做。

0

谢谢Paŭlo。以下是更正的答案:

public class Main { 

    public static int[] convert(byte[] in) { 
     int bytesPerSample = 4; 
     int[] res = new int[in.length/bytesPerSample]; 

     for (int i = 0; i < res.length; i++) { 
      int bOffset = i * bytesPerSample; 
      int intVal = 0; 
      for (int b = 0; b < bytesPerSample; b++) { 
       int v = in[bOffset + b]; 
       if (b < bytesPerSample - 1) { 
        v &= 0xFF; 
       } 
       intVal += v << (b * 8); 
      } 
      res[i] = intVal; 
     } 

     return res; 
    } 

    public static byte[] convert(int[] in) { 
     int bytesPerSample = 4; 
     byte[] res = new byte[bytesPerSample * in.length]; 

     for (int i = 0; i < in.length; i++) { 
      int bOffset = i * bytesPerSample; 
      int intVal = in[i]; 
      for (int b = 0; b < bytesPerSample; b++) { 
       res[bOffset + b] = (byte) (intVal & 0xFF); 
       intVal >>= 8; 
      } 
     } 

     return res; 
    } 

    public static void main(String[] args) { 
     int[] in = {33, 1035, 8474}; 
     byte[] b = convert(in); 
     int[] in2 = convert(b); 
     System.out.println(Arrays.toString(in2)); 
    } 

} 
相关问题