Java 字节数组并将 int 复制到其中

标签 java int arrays byte

在 byte[] 数组中的某个点放置 int 的最佳方法是什么?

假设你有一个字节数组:

byte[] bytes = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
int someInt = 12355; //0x43, 0x30

我怎样才能像bytes[4] = someInt;那样,现在bytes[4]将等于0x43,bytes[5]将等于0x30?

我习惯于在 C++ 中使用 memcpy,不知道 Java 中的替代方案。

谢谢

最佳答案

如果您还想将 int 的高 0 字节放入 byte[] 中:

void place(int num, byte[] store, int where){
    for(int i = 0; i < 4; ++i){
        store[where+i] = (byte)(num & 0xFF);
        num >>= 8;
    }
}

如果您只想将字节存储到最高非零字节:

void place(int num, byte[] store, int where){
    while(num != 0){
        store[where++] = (byte)(num & 0xFF);
        num >>>= 8;
    }
}

如果您想要字节大端(最低索引处的最高字节),存储所有四个字节的版本非常简单,另一个稍微困难一点:

void placeBigEndian(int num , byte[] store, int where){
    for(int i = 3; i >= 0; --i){
        store[where+i] = (byte)(num & 0xFF);
        num >>= 8;
    }
}

void placeBigEndian(int num, byte[] store, int where){
    in mask = 0xFF000000, shift = 24;
    while((mask & num) == 0){
        mask >>>= 8;
        shift -= 8;
    }
    while(shift > 0){
        store[where++] = (byte)((num & mask) >>> shift);
        mask >>>= 8;
        shift -= 8;
    }
}

关于Java 字节数组并将 int 复制到其中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8640193/

相关文章:

java - 使用多播在 Java 中进行网络发现

java - 以任意顺序对字符串进行排序

java - 通用方法不适用于 'int' 类型变量?

java - 以 o(n) 或 o(1) 的时间复杂度对整数数组进行排序

java - 需要从 HTML 创建包含文本、图像和项目符号的 PDF

java - 使用Java将数组数据插入数据库

c - 如何在 C 中将 unsigned int 转换或转换为 int?

java - n个字符串中的公共(public)字符

c - 二维数组动态分配中的段错误