Java中有关byte和String的转换笔记

问题1:java中没有实现这种“byte a = 0xB2 --> String b = “B2””转换的简单实现需要自己实现。 
答:自己编写的转换函数,思路将byte的高低4位分开,分别转换为对应的字符然后合成返回的字符串。 

java 代码
  1. public static String byteToString(byte b) {    
  2. byte high, low;    
  3. byte maskHigh = (byte)0xf0;    
  4. byte maskLow = 0x0f;    
  5.   
  6. high = (byte)((b & maskHigh) >> 4);    
  7. low = (byte)(b & maskLow);    
  8.   
  9. StringBuffer buf = new StringBuffer();    
  10. buf.append(findHex(high));    
  11. buf.append(findHex(low));    
  12.   
  13. return buf.toString();    
  14. }    
  15.   
  16. private static char findHex(byte b) {    
  17. int t = new Byte(b).intValue();    
  18. t = t < 0 ? t + 16 : t;    
  19.   
  20. if ((0 <= t) &&(t <= 9)) {    
  21. return (char)(t + '0');    
  22. }    
  23.   
  24. return (char)(t-10+'A');    
  25. }    
  26.   

未解决的疑问在java中不存在类似C中的无符号量,所以如果一个字节超过0x80其对应的整型值即为负值,但在高位右移4位后还是负值,且与对应的正值相差16,比如0xB2经过右移后的期望值是0x0B(11)但实际值是-5与预期的值相差16(这个16通过多次试验得出),对此现象为找到合理的解释。

 

问题2:“String a=”B2” --> byte b=0xB2”字符的byte转换为byte数据类型 
答:思路通过Integer作为转换的中间桥梁 

java 代码
  1. public static int stringToByte(String in, byte[] b) throws Exception {    
  2. if (b.length < in.length() / 2) {    
  3. throw new Exception("byte array too small");    
  4. }    
  5.   
  6. int j=0;    
  7. StringBuffer buf = new StringBuffer(2);    
  8. for (int i=0; i
  9. buf.insert(0, in.charAt(i));    
  10. buf.insert(1, in.charAt(i+1));    
  11. int t = Integer.parseInt(buf.toString(),16);    
  12. System.out.println("byte hex value:" + t);    
  13. b[j] = (byte)t;    
  14. i++;    
  15. buf.delete(0,2);    
  16. }    
  17.   
  18. return j;    
  19. }    
  20.   

问题3:整数(表示范围限定为两个字节unsigned short)通过Integer.byteValue()转换成byte[2],如果超出一个byte的表示范围将会截断高位的值。 
答:思路一个byte能表示的最大整数为256(超过128为负值,超过256将被截断),所以取256的倍数为byte[0],256的余数为byte[1]。

java 代码
  1. byte[] d = new byte[l+2];        
  2. ….        
  3. buff.put(new Integer(l/256).byteValue());        
  4. buff.put(new Integer(l%256).byteValue());    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值