zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    【leetcode】Remove Duplicates from Sorted Array I & II(middle)
    Android--Activity在跳转时携带数据
    HDU 5371 Manacher
    Java之旅hibernate(2)——文件夹结构
    【智能路由器】让MT7620固件openwrt支持USB
    Android Context 是什么?
    分治法解决高速排序问题
    Alluxio增强Spark和MapReduce存储能力
    UVA
    《React-Native系列》44、基于多个TextInput的键盘遮挡处理方案优化
  • 原文地址:https://www.cnblogs.com/chenyixun/p/14052420.html
Copyright © 2011-2022 走看看