You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Java中如何将16位有符号整数数组转为字节数组?

Android Java:16位有符号整数序列的编码实现(用于解码算法验证)

在Android Java开发场景中,我们需要验证一段通过for循环拼接字节对解码16位有符号整数序列的算法正确性。测试时需要先将整数列表编码为字节数组(仅测试阶段可使用ByteBuffer等可靠工具,实际场景字节数组由AudioRecord生成),以下是完整实现方案:

需求说明

给定整数列表,编码后的字节数组需满足:每个16位有符号整数拆分为两个字节,高8位在前,低8位在后(对应解码逻辑中的a<<8 | b&0xFF,其中a是高8位字节,b是低8位字节)。

完整代码实现

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.Arrays;

// 你的方法所在类中
void _go() {
    int[] source = {4536, -1, -32768, 32767, 0, -2222};
    // 你给出的预期编码是正确的,符合高8位在前的字节顺序
    byte[] expectedEncoding = {17,4,-1,-1,-128,0,-128,1,0,0,-9,82};

    // --- 编码部分实现(两种方案可选)---
    // 方案1:使用ByteBuffer(测试阶段推荐,简洁可靠)
    byte[] encoded;
    ByteBuffer buffer = ByteBuffer.allocate(source.length * 2);
    // 设置字节序为大端(对应解码逻辑的高8位在前)
    buffer.order(ByteOrder.BIG_ENDIAN);
    for (int num : source) {
        // 转成short确保是16位有符号整数,匹配AudioRecord采样格式
        buffer.putShort((short) num);
    }
    encoded = buffer.array();

    // 方案2:手动位运算(模拟底层逻辑,可选)
    /*
    byte[] encoded = new byte[source.length * 2];
    for (int i = 0; i < source.length; i++) {
        short s = (short) source[i];
        // 取高8位,自动截断为byte类型
        encoded[2*i] = (byte) (s >> 8);
        // 取低8位,用&0xFF确保无符号转换
        encoded[2*i + 1] = (byte) (s & 0xFF);
    }
    */

    // 修复原解码代码的bug:原逻辑会重复读取字节,修正为按索引步进2取字节对
    int[] decoded = new int[source.length];
    for (int i = 0; i < encoded.length / 2; i++) {
        byte a = encoded[i*2];
        byte b = encoded[i*2 + 1];
        decoded[i] = (short) (a << 8 | b & 0xFF);
    }

    // 用Arrays.toString打印数组内容,避免输出内存地址
    Log.i("XXX", "decoded values: " + Arrays.toString(decoded));
}

关键说明

  1. 原解码代码bug修复:原代码循环取字节时用encoded[i]和encoded[i+1],会导致字节重复读取(如i=0取0、1,i=1取1、2),修正为encoded[i*2]和encoded[i*2+1]才能正确获取每一对独立字节。
  2. 字节序匹配:解码逻辑是高8位左移拼接低8位,因此编码必须保证高8位字节在前,对应ByteBuffer的BIG_ENDIAN字节序。
  3. 类型转换注意:将int转short时会自动截断为16位,严格符合16位有符号整数的范围(-32768~32767),和AudioRecord的采样数据格式一致。

内容的提问来源于stack exchange,提问作者Nerdy Bunz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 00:25:50