牛骨文教育服务平台(让学习变的简单)
博文笔记

整型int和字节数组byte相互转换

创建时间:2017-06-21 投稿人: 浏览次数:435

Java中整型int和字节数组byte相互转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送、者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形int转换成byte数组,同时如何把一个长度为4的byte数组转换为int类型,分别上传Java版本代码和kotlin版本代码(刚学的,试试手,代码运行结果经过校验无误)

Java版本

/**
 * Created by tao.liu on 2017/6/20 0020.
 * 整型int和字节数组byte相互转换
 */
public class Test {
    public static void main(String[] args) {
        int data = 212123;
        System.out.println(data);
        byte[] toByteArray = toByteArray(data, 4);
        for (int i = 0; i < toByteArray.length; i++) {
            System.out.println("["+i+"] = "+toByteArray[i]);
        }
        int i = toInt(toByteArray);
        System.out.println(i);
    }
    /**
     * int数据转数组byte
     *
     * @param source
     * @param len
     * @return
     */
    public static byte[] toByteArray(int source, int len) {
        byte[] target = new byte[len];
        for (int i = 0; i < 4 && i < len; i++) {
            target[i] = (byte) (source >> 8 * i & 0xff);
        }
        return target;
    }
    /**
     * 数组byteint数据
     * @param source
     * @return
     */
    public static int toInt(byte[] source) {
        int target = 0;
        for (int i = 0; i < source.length; i++) {
            target += (source[i] & 0xff) << 8 * i;
        }
        return target;
    }
}
运行结果:
212123
[0] = -101
[1] = 60
[2] = 3
[3] = 0
212123

kotlin版本

import kotlin.experimental.and

/**
 * Created by tao.liu on 2017/6/20 0020.
 * 整型int和字节数组byte相互转换
 */

fun main(args: Array<String>) {
    var data = 212123
    println(data)
    val toByteArray = toByteArray(data, 4)
    for (b in toByteArray.indices){
        print("${toByteArray[b]} ")
    }
    println()

    val toInt = toInt(toByteArray)
    println(toInt)
}

/**
 * int数据转数组byte
 */
fun toByteArray(source: Int, len: Int): ByteArray {
    var target = byteArrayOf(0,0,0,0)
    var index = 0
    while ((index < 4) && (index < len)) {
        target[index] = (source.shr(8*index)and 0xff).toByte()
        index++
    }
    return target
}

/**
 * 数组byteint数据
 */
fun toInt(source: ByteArray):Int{
    var target = 0
    var index = 0
    while (index<source.size){
        target+=(source[index].toInt() and 0xff).shl(8*index)
        index++
    }
    return target
}
运行结果:
212123
-101 60 3 0 
212123

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。