java中字节数组与其他各类型的转换

时间:2023-01-12 17:41:14

与上一篇博客类似,这也是在同一个项目中遇到的一些问题,不过该问题是得到的字节数组的转换问题:

1,怎样将一个字符串转换为字节数组:

        //模拟的字符串
String a="abcdefghij";
//定义一个字节数组
 byte[] arr=new byte[25];
//将字符串转换成对应的字节放入字节数组中(也可以自己一个个放)
 arr=a.getBytes();

然后调用输出流的write方法直接将字节数组传输出去


2,将数字转换为字节数组:

若只有一位,赋值强转(加上byte)即可,16进制一样。

若要转换成4位:

public static byte[] intToByteArray(int i) {   
//定义字节数组的长度为4
byte[] result = new byte[4];
//由高位到低位
//右移,分别存入字节数组中
 result[0] = (byte)((i >> 24) & 0xFF);
result[1] = (byte)((i >> 16) & 0xFF);
result[2] = (byte)((i >> 8) & 0xFF);
result[3] = (byte)(i & 0xFF);
return result;
}



3,将字节数组转化为字符串:

String s = "fs123fdsa";//String变量 

byte b[] = s.getBytes();//String转换为byte[]

String t = new String(b);//bytep[]转换为String

4,字节数组转化为数字:

项目中是先将byte的每个数组(8位)转化成对应的整数,将整数转化为对应的16进制字符串,截取表示整数的部分,通过Integer.parseInt转化为对应的整数(转化为String类型时用了类似的方法)。即全部转化为16进制再处理。


5,返回16进制字符串对应的16进制对应的字节:

这句话有点别扭。比如“638666138e84c05f”是字节对应的16进制数,但显示在屏幕上的是个字符串,并不是16进制,这可以用commons-codec的Hex.encodeHexString直接转换过来。同样,我们要用这个16进制串对应的字节,转这个字符串肯定是不行的,要的是它的16进制对应的字符串,就用到了下面的方法:

public static byte[] toByteArray(String hexString) {


hexString = hexString.toLowerCase();
final byte[] byteArray = new byte[hexString.length() / 2];
int k = 0;
for (int i = 0; i < byteArray.length; i++) {//因为是16进制,最多只会占用4位,转换成字节需要两个16进制的字符,高位在先
byte high = (byte) (Character.digit(hexString.charAt(k), 16) & 0xff);
byte low = (byte) (Character.digit(hexString.charAt(k + 1), 16) & 0xff);
byteArray[i] = (byte) (high << 4 | low);
k += 2;
}
return byteArray;
}

6,字节对应的16进制数转成对应的16进制数的字符串:

不解释了,跟5是逆过程:638666138e84c05f--》“638666138e84c05f”

 public static String toHexString(byte[] byteArray) {
  if (byteArray == null || byteArray.length < 1)
   throw new IllegalArgumentException("this byteArray must not be null or empty");
 
  final StringBuilder hexString = new StringBuilder();
  for (int i = 0; i < byteArray.length; i++) {
   if ((byteArray[i] & 0xff) < 0x10)//0~F前面不零
    hexString.append("0");
   hexString.append(Integer.toHexString(0xFF & byteArray[i]));
  }
  return hexString.toString().toLowerCase();
 }