美文网首页
Java,Android常用字节提取与转换[byte 转 int

Java,Android常用字节提取与转换[byte 转 int

作者: 满脸胡渣的年轻大叔 | 来源:发表于2023-11-22 09:44 被阅读0次

常用方法的基础【面试也常问】

将一个int(byte)AA 转成 16进制显示(也是byte array 16进制打印显示的基础)

String result = Interger.toHexString(AA & 0xFF);

这里为什么要 &0xFF ,可以参考这个链接:
Java 教程|byte 转换 int 时为何与 0xff 进行与运算

将一个 16 BBB进制字符串,转成byte

byte result = (byte)Integer.parseInt(BBB,16)

将byte[] 数据以16进制打印

public static String bytesToHexString(byte[] b){
   StringBuilder rel = new StringBuilder();
   for (int i = 0; i < b.length; i++)
      String hex = Integer.toHexString(b[i] & 0xFF);
       if (hex.length() == 1) {
            hex = ’0′ + hex;
        }
      rel.append(hex.toUpperCase());// 用大写的形式展现出来
  }
  return rel.toString();
}

int 和 byte[] 等之间的转换

方法1:利用系统工具ByteBuffer

byte[] 转 int

// data 为byte[4] 
ByteBuffer buffer = ByteBuffer.wrap(data);
int reuslt = buffer.getInt();

int 转byte[]

ByteBuffer buffer = ByteBuffer.allocate(4);
buffer.put(data);
byte[] result = buffer.array();

ByteBuffer扩展

ByteBuffer 可以设置大端序,小端序
ByteBuffer用来获取一序列数据,并从中读取int,short等非常方便 ,对于modbus 这种就非常方便,如下

// data 为byte[],从设备读取的
ByteBuffer buffer = ByteBuffer.wrap(data);
// 获取一个 signed32
int data1 = buffer.getInt() ;
// 获取一个 un_signed32 
int data2 = buffer.getInt() & 0xFFFFFFFF;
// 获取一个 un_signed16 (无符号 short)
int dataUShort = buffer.getShort() & 0xFFFF;
// 获取一个 signed16 
int dataShort = buffer.getShort();

方法2:正常按位拆和按位合并

正常byte[] 转int(比如CAN扩展帧CANID,一般由29 个bit)

原理:一个int 占4个字节,即 4 个byte

// 这里为展示,假定 传入的data 一定是4位,且高位在前
public static int bytesToInt(byte[] data){
    int result = 0;
    result += (int)((data[0] & 0xFF) << 24);
    result += (int)((data[1] & 0xFF) << 16);
    result += (int)((data[2] & 0xFF) << 8);
    result += (int)(data[3] & 0xFF);
}

byte[] 转 int (比较常见)

一个两位的byteArr[],高位在前,低位在后

比如:一个int 转成 4 个byte(高位在前,低位在后)
原理:一个int 占4个字节,即 4 个byte

public static byte[] intToByteArray(int num){
      byte[] result = new byte[4];
      result [0] = (byte)((num >>24) & 0xFF);
      result [1] = (byte)((num >>16) & 0xFF);
      result [2] = (byte)((num >> 8 ) &0xFF);
      result [3] = (byte)(num & 0xFF);
      return result;
}

相关文章

网友评论

      本文标题:Java,Android常用字节提取与转换[byte 转 int

      本文链接:https://www.haomeiwen.com/subject/gwntwdtx.html