JAVA类型转换
2017-08-01 09:39
141 查看
一、byte[]类型转换为明码的String类型
在32位的电脑中数字都是以32格式存放的,如果是一个byte(8位)类型的数字,他的高24位里面都是随机数字,低8位才是实际的数据。java.lang.Integer.toHexString() 方法的参数是int(32位)类型,如果输入一个byte(8位)类型的数字,这个方法会把这个数字的高24为也看作有效位,这就必然导致错误,使用&
0XFF操作,可以把高24位置0以避免这样错误的发生。
二、明文String转换为byte[]类型
四、转成固定位数的Hex数值
五、long型转成固定位数的Hex(实际转换getBytes)
六、byte[] 转GBK
八、byte[] 转GBK
九、byte[]转10进制int
十、左补齐0
/** * @param bArray * @return * @byte[] 转成string */ public String bytesToHexString(byte[] bArray) { StringBuffer sb = new StringBuffer(bArray.length); String sTemp; for (int i = 0; i < bArray.length; i++) { sTemp = Integer.toHexString(0xFF & bArray[i]); //若为负数,则清除高位,正数不受影响 if (sTemp.length() < 2) sb.append(0); sb.append(sTemp.toUpperCase()); //大写 } return sb.toString(); }
在32位的电脑中数字都是以32格式存放的,如果是一个byte(8位)类型的数字,他的高24位里面都是随机数字,低8位才是实际的数据。java.lang.Integer.toHexString() 方法的参数是int(32位)类型,如果输入一个byte(8位)类型的数字,这个方法会把这个数字的高24为也看作有效位,这就必然导致错误,使用&
0XFF操作,可以把高24位置0以避免这样错误的发生。
二、明文String转换为byte[]类型
/** * @param str * @return by qiao * 明文转 * @string 转为byte[] */ public byte[] hexStringToByte(String str) { if (str.length() % 2 != 0) { return null; } //都是大写字母就可以不转换成全大写 str = str.toUpperCase(); int len = str.length() / 2; char[] charArray = str.toCharArray(); byte[] array = new byte[len]; for (int i = 0; i < len; i++) { char hBit = charArray[2 * i]; char lBit = charArray[2 * i + 1]; int hNum = (hBit > '9') ? (hBit - 'A' + 10) : (hBit - '0'); int lNum = (lBit > '9') ? (lBit - 'A' + 10) : (lBit - '0'); array[i] = (byte) (hNum * 16 + lNum); } return array; }三、对数据进行异或运算
/** * 全体数据取亦或 * * @param data * @return */ public String getCheckNum(byte[] data) { int checknum = 0; for (int i = 0; i < data.length; i++) //qiao:开始i为0改为1,长度减去2 { checknum = checknum ^ data[i]; //异或得出校验码 数据开始与0异或为本身 } byte checkresult=(byte) checknum; return bytesToHexString(new byte[]{checkresult}); //int转string }
四、转成固定位数的Hex数值
/** * @param bytecount 转成h固定位数的hex数值,如2byte,200,转成0200 * @param data * @return */ public String byteFromIntBCD(int bytecount,int data) { try { byte[] result=new byte[bytecount]; String newdata=String.format("%0"+bytecount*2+"d",data); return newdata; } catch (Exception ex) { return String.format("%0"+bytecount*2+"d",0); } }
b,布尔类型,只要实参为非false的布尔类型,均格式化为字符串true,否则为字符串false。 d,整数类型(十进制)。 x,整数类型(十六进制)。 o,整数类型(八进制) n,平台独立的 4000 换行符, 也可通过System.getProperty("line.separator")获取
// 0 代表前面补充0 // bytecount*2代表长度 // d 代表参数为正数型
五、long型转成固定位数的Hex(实际转换getBytes)
/** * @param bytecount 转成h固定位数的hex数值,如2,10,转成000A * @param data 右补齐 * @return */ public String byteFromInt(int bytecount,long data) { byte[] result=new byte[bytecount]; String newdata=String.format("%0" +bytecount*2+"x",data); return newdata; }
六、byte[] 转GBK
/** * byte[]STRING转GBK * @param data * @return */ public String GetGbkString(byte[] data) { String result=""; if (data.length==0) return ""; try { result=new String(data,"gbk"); } catch (UnsupportedEncodingException e) { result=new String(data); } return result; }七、Long转成Double
/** *Long转成double * @param data * @return */ public double BytesToDouble(byte[] data) { String _stri = bytesToHexString(data); long sLat = Long.parseLong(_stri, 16); double result = sLat *1.0; //乘客位置纬度 return result; }
八、byte[] 转GBK
public String TextDown(byte[] data){ byte[] tag = new byte[1]; System.arraycopy(data, 13, tag, 0, 1); //标志 byte[] describe = new byte[Protrol.getInstance().getMsgBodyLength(data) - 2]; //文本信息STRING System.arraycopy(data, 14, describe, 0, Protrol.getInstance().getMsgBodyLength(data) - 2); //长度问题 String s = ""; try { s = new String(describe, "gbk"); //s文本信息 } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return s; }
九、byte[]转10进制int
byte[] tag = new byte[1]; System.arraycopy(data, 13, tag, 0, 1); //标志 String qTag = Protrol.getInstance().bytesToHexString(tag); int questionTag = Integer.parseInt(qTag,16); System.out.println(questionTag+"标志");
十、左补齐0
/** * 左补齐 * @param bytecount * @param data * @return */ public String byteFromIntRight(int bytecount,byte[] data) { try { byte[] result=new byte[bytecount]; System.arraycopy(data,0,result,0,data.length); return bytesToHexString(result); } catch (Exception ex) { return String.format("%0"+bytecount*2+"d",0); } }
相关文章推荐
- Java包装类(Wrapper)、基本数据类型、String类之间的转换
- JAVA数据类型转换
- 工具类-Java通讯中的类型转换
- java 中unsigned类型的转换
- JAVA 基本数据类型间的转换
- Java类型转换(int - byte[],float - byte[])
- java 定时器的使用(Timer) 日期类型 转换
- java第十一节-包装类,基本类型,String之间的转换
- Java基础--基本数据类型转换
- SQL 到 Java 的数据类型转换
- JAVA数据类型转换
- Java 中 父类变量访问子类方法 需要使用 类型转换 (instenceof)关键字 /类型判断/
- Java总结篇系列:类型转换/造型
- Java:基本数据类型与类型转换
- Java复习笔记----变量定义、数据类型转换
- JAVA中int、String的类型转换(
- Java疑问 不解-------------- 为什么非要进行强制性类型转换???
- java 数据类型转换
- Java中String和int类型相互转换
- java—变量与常量 ,常用数据类型,数据类型转换