• Java中数值类型与字节数组之间的转换大法(精简)


    /**
    * 整型转字节数组
    *
    * @param data 待转换数值
    * @param bytes 转换后的数组
    * @param beginIndex 数组起始下标
    * @return
    */
    public static int int2Bytes(int data, byte[] bytes, int beginIndex) {
    if (null == bytes || beginIndex < 0 || bytes.length < beginIndex + 4) {
    return -1;
    }

    try {
    bytes[beginIndex++] = (byte) (data & 0xff);
    bytes[beginIndex++] = (byte) (data >> 8 & 0xff);
    bytes[beginIndex++] = (byte) (data >> 16 & 0xff);
    bytes[beginIndex++] = (byte) (data >> 24 & 0xff);
    } catch (RuntimeException e) {
    throw e;
    }

    return beginIndex;
    }

    /**
    * 长整型转字节数组
    *
    * @param data 待转换数值
    * @param bytes 转换后的数组
    * @param beginIndex 数组起始下标
    * @return
    */
    public static int long2Bytes(long data, byte[] bytes, int beginIndex) {
    if (null == bytes || beginIndex < 0 || bytes.length < beginIndex + 8) {
    return -1;
    }

    try {
    bytes[beginIndex++] = (byte) (data & 0xff);
    bytes[beginIndex++] = (byte) (data >> 8 & 0xff);
    bytes[beginIndex++] = (byte) (data >> 16 & 0xff);
    bytes[beginIndex++] = (byte) (data >> 24 & 0xff);
    bytes[beginIndex++] = (byte) (data >> 32 & 0xff);
    bytes[beginIndex++] = (byte) (data >> 40 & 0xff);
    bytes[beginIndex++] = (byte) (data >> 48 & 0xff);
    bytes[beginIndex++] = (byte) (data >> 56 & 0xff);
    } catch (RuntimeException e) {
    throw e;
    }

    return beginIndex;
    }

    /**
    * 字节数组转整型
    *
    * @param bytes 待转换数组
    * @param beginIndex 数组起始下标
    * @return
    */
    public static int bytes2Int(byte[] bytes, int beginIndex) {
    if (null == bytes || beginIndex < 0 || bytes.length < beginIndex + 4) {
    return -1;
    }

    int result = 0;
    try {
    int tmpVal = 0;
    for (int i = 0; i < 4; i++) {
    tmpVal = (bytes[i + beginIndex] << (i * 8));
    switch (i) {
    case 0:
    tmpVal = tmpVal & 0x000000FF;
    break;
    case 1:
    tmpVal = tmpVal & 0x0000FF00;
    break;
    case 2:
    tmpVal = tmpVal & 0x00FF0000;
    break;
    case 3:
    tmpVal = tmpVal & 0xFF000000;
    break;
    }

    result |= tmpVal;
    }
    } catch (RuntimeException e) {
    throw e;
    }

    return result;
    }

    /**
    * 字节数组转长整型
    *
    * @param bytes 待转换数组
    * @param beginIndex 数组起始下标
    * @return
    */
    public static long bytes2Long(byte[] bytes, int beginIndex) {
    if (null == bytes || beginIndex < 0 || bytes.length < beginIndex + 8) {
    return -1L;
    }

    long result = 0L;
    try {
    int shift = 0;
    for (int i = 0; i < 8; i++) {
    shift = i << 3;
    result |= ((long) 0xff << shift) & ((long) bytes[i + beginIndex] << shift);
    }
    } catch (RuntimeException e) {
    throw e;
    }

    return result;
    }
  • 相关阅读:
    2013-3 阿里性能稳定性沙龙
    8种Nosql数据库系统对比
    百度技术笔记之2013-1
    百度技术沙龙之2013-2&3
    【消息队列MQ】各类MQ比较
    Unity3D 游戏引擎之C#使用Socket与HTTP连接server数据传输包
    android的ndk学习(1)
    杭电 3555 Bomb
    FaceBook开源库Fresco
    SDUTOJ 2476Period
  • 原文地址:https://www.cnblogs.com/chenyixun/p/14052420.html
Copyright © 2020-2023  润新知