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

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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值