您的位置:首页 > 编程语言 > Java开发

JAVA类型转换

2017-08-01 09:39 141 查看
一、byte[]类型转换为明码的String类型

/**
* @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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: