android 里 ,如何将 int 转换为char 的16进制,将string 类型的转byte[] 的算法
1. int 转换为char 的16进制
比如,int i = 10 ,想得到 char w = 0x0A;
比如int i = 1, 想得到 char w = 0x01;
2 将string 类型的转byte[]
byte [] buff = new byte[30];
比如 String str= "1"
想得到 buff[0] = 0x01;
比如 str = "10"
想得到 buff[0] = 0x0A;
比如 str = "1011"
buff[0]= 0x0A;
想得到 buff[1] = 0x0B;
------解决方案--------------------
public String getHexString() {
//char to hex.
// char character = 'a';
// String str = String.valueOf(character);
//String to hex.
String str = "aA";
StringBuilder sb = new StringBuilder();
char[] charArray = str.toCharArray();
if (charArray != null) {
for (char c : charArray) {
byte byteHigh = (byte)(c >> 8 & 0xff);
byte byteLow = (byte)(c & 0xff);
sb.append(convertByteToHex(byteHigh));
sb.append(convertByteToHex(byteLow));
}
}
return sb.toString();
}
private String convertByteToHex(byte b) {
int high = b / 16;
int low = b % 16;
return getHex(high) + getHex(low);
}
private String getHex(int nibble) {
switch (nibble) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
return String.valueOf(nibble);
case 10:
return "A";
case 11:
return "B";
case 12:
return "C";
case 13:
return "D";
case 14:
return "E";
case 15:
return "F";
}
return "";
}
------解决方案--------------------
第一个如果没算法要求的话,用Integer.toHexString(int i),再用toCharArray转成char数组就行了。
要求算法优化的话最快应该是查表
- Java code
char[] ch={'1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};char w=ch[i-1];
------解决方案--------------------
正好做过类似楼主需求的东西。我做的是和串口相关的,因为发出的数据都是16进制,不知道楼主的是不是
1.char a = (char)Integer.parseInt(i, 16);//i是你给出的十进制数
2.此方法我因为经常用到故设置为静态方法
- Java code
/** * 把字符串去空格后转换成byte数组。如"37 5a"转成[0x37][0x5A] * @param s * @return */ public static byte[] string2bytes(String s){ String ss = s.replace(" ", ""); int string_len = ss.length(); int len = string_len/2; if(string_len%2 ==1){ ss = "0"+ss; string_len++; len++; } byte[] a = new byte[len]; for(int i=0;i<len;i++){ a[i] = (byte)Integer.parseInt(ss.substring(2*i,2*i+2), 16); } return a; }