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

来源:互联网 发布:js split 空字符串 编辑:程序博客网 时间:2024/05/31 18:46

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

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();
 }


0 0