在开发Android蓝牙串口的过程中,本人发现需要经常进行类型的相互转换,这里把本项目遇到的转换函数记下:
1.十六进制字符串转换字节数组
//方法一:
public static byte[] hexStringToBytes(String hexString) //这里的形参一定要是十六进制字符串
{
if ((hexString == null) || (hexString.equals(""))) {
return null;
}
hexString = hexString.toUpperCase();
int length = hexString.length() / 2;
char[] hexChars = hexString.toCharArray();
byte[] d = new byte[length];
for (int i = 0; i < length; ++i) {
int pos = i * 2;
d[i] = (byte)(charToByte(hexChars[pos]) << 4 | charToByte(hexChars[(pos + 1)])); //调用了下方字符转字节的方法
}
return d;
}
1.十六进制字符串转换字节数组
//方法一:
public static byte[] hexStringToBytes(String hexString) //这里的形参一定要是十六进制字符串
{
if ((hexString == null) || (hexString.equals(""))) {
return null;
}
hexString = hexString.toUpperCase();
int length = hexString.length() / 2;
char[] hexChars = hexString.toCharArray();
byte[] d = new byte[length];
for (int i = 0; i < length; ++i) {
int pos = i * 2;
d[i] = (byte)(charToByte(hexChars[pos]) << 4 | charToByte(hexChars[(pos + 1)])); //调用了下方字符转字节的方法
}
return d;
}
private static byte charToByte(char c)
{
return (byte)"0123456789ABCDEF".indexOf(c);
}
//方法二:
public static byte[] getByteArray(String hexString) {
return new BigInteger(hexString,16).toByteArray(); //这里需要在本类中导入import java.math.BigInteger;
}
2.字节数组转换十六进制字符串
public static String Bytes2HexString(byte[] b) {
String ret = "";
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
ret += hex.toUpperCase()+" "; //这里是我自己处理成大写加空格的形式,可根据需要不同改变
}
return ret;
}
3.字符串转换十六进制字符串
//方法一
public static String toHexString(String s)
{
String str="";
for (int i=0;i<s.length();i++)
{
int ch = (int)s.charAt(i);
String s4 = Integer.toHexString(ch).toUpperCase();
str = str + s4;
}
return str;
}
//方法二
public static String stringToHexString(String strPart) {
String hexString = "";
for (int i = 0; i < strPart.length(); i++) {
int ch = (int) strPart.charAt(i);
String strHex = Integer.toHexString(ch);
hexString = hexString + strHex;
}
return hexString;
}
4.获取当前时间毫秒数
Long l=System.currentTimeMillis();
5.数学处理函数
Math.floor(2.5)=2 //直接舍掉小数部分
Math.rint(2.9)=3 //四舍五入部分
Math.round(2.5)=3 //四舍五入取整
{
return (byte)"0123456789ABCDEF".indexOf(c);
}
//方法二:
public static byte[] getByteArray(String hexString) {
return new BigInteger(hexString,16).toByteArray(); //这里需要在本类中导入import java.math.BigInteger;
}
2.字节数组转换十六进制字符串
public static String Bytes2HexString(byte[] b) {
String ret = "";
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
ret += hex.toUpperCase()+" "; //这里是我自己处理成大写加空格的形式,可根据需要不同改变
}
return ret;
}
3.字符串转换十六进制字符串
//方法一
public static String toHexString(String s)
{
String str="";
for (int i=0;i<s.length();i++)
{
int ch = (int)s.charAt(i);
String s4 = Integer.toHexString(ch).toUpperCase();
str = str + s4;
}
return str;
}
//方法二
public static String stringToHexString(String strPart) {
String hexString = "";
for (int i = 0; i < strPart.length(); i++) {
int ch = (int) strPart.charAt(i);
String strHex = Integer.toHexString(ch);
hexString = hexString + strHex;
}
return hexString;
}
4.获取当前时间毫秒数
Long l=System.currentTimeMillis();
5.数学处理函数
Math.floor(2.5)=2 //直接舍掉小数部分
Math.rint(2.9)=3 //四舍五入部分
Math.round(2.5)=3 //四舍五入取整