【问题标题】:Convert byte to int and vice-versa将字节转换为整数,反之亦然
【发布时间】:2011-02-25 16:40:04
【问题描述】:

任何人都知道如何在 java 中将大字节数组(例如 1000 个字节)转换为 int/long 等?

【问题讨论】:

  • 一个 int 是 32 位(4 个字节),一个 long 是 64 位(8 个字节)。您将如何处理数组的 996(resp. 992)其他字节?你真正想做什么?

标签: java byte int


【解决方案1】:

你可以使用循环

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

这样一来,1000 个元素最多可能需要 10 微秒。

【讨论】:

  • 远远低于现代 PC。
  • 是的,但如果 10 微秒听起来不长,那它是什么也没关系。 ;)
【解决方案2】:

要在 Java 中将 byte 转换为 int,您有两种选择:

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

Java 库中没有将数组从一种原始类型转换为另一种的方法,您必须手动完成。

【讨论】:

    【解决方案3】:

    谢谢帕洛。以下是正确答案:

    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));
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2011-11-28
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      • 2013-11-11
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多