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;
比如,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;
第二个你起码要说好怎么分啊,1011为什么转成AB,而不是1011?A11?10B?
Integer.toHexString 返回的是string 类型啊,难道再转换? 我要的是 char 型的,char w = 0x01;第二个 就是两个两个的分 如果比如1011 就是分成10 ,11 ,再转换为相应的十六进制,
并且赋值是两位的 比如 10 十六进制为A ,我存到byte[0]里面是 0x0A,而不是0xA
//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 "";
}
要求算法优化的话最快应该是查表char[] ch={'1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
char w=ch[i-1];
第二个不知道有没有现成的算法,没有的话就先用循环for (int i = 0; i < length/2; i++) {
substr[i] = str.substring(i*2, i*2 + 2);
}
分成2个2个一组的String数组,然后string转成byte就行了。
1.char a = (char)Integer.parseInt(i, 16);//i是你给出的十进制数
2.此方法我因为经常用到故设置为静态方法 /**
* 把字符串去空格后转换成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;
}
3.顺便附赠与楼主要求2相反的两个方法,在调试输出十六进制数据时很有用 /**
* 16进制数组转化成字符串(大写字母),比如[0x03][0x3f]转化成"33F"
* @param b
* @return
*/
public static String hex2HexString(byte[] b) {
int len = b.length;
int[] x = new int[len];
String[] y = new String[len];
StringBuilder str = new StringBuilder();
// 转换成Int数组,然后转换成String数组
for (int j = 0; j < len; j++) {
x[j] = b[j] & 0xff;
y[j] = Integer.toHexString(x[j]);
while (y[j].length() < 2) {
y[j] = "0" + y[j];
}
str.append(y[j]);
}
//如果是以"0"开头,则弃掉"0"
while(str.indexOf("0")==0){
str = str.delete(0, 1);
}
return new String(str).toUpperCase();//toUpperCase()方法 转化成大写
}
/**
* 16进制数组转化成调试用字符串(大写字母),比如[0x03][0x3f]转化成"03 3F"
* @param b
* @return
*/
public static String hex2DebugHexString(byte[] b) {
int len = b.length;
int[] x = new int[len];
String[] y = new String[len];
StringBuilder str = new StringBuilder();
// 转换成Int数组,然后转换成String数组
int j = 0;
for (; j < len; j++) {
x[j] = b[j] & 0xff;
y[j] = Integer.toHexString(x[j]);
while (y[j].length() < 2) {
y[j] = "0" + y[j];
}
str.append(y[j]);
str.append(" ");
}
return new String(str).toUpperCase();//toUpperCase()方法 转化成大写
}
char w = 10;
与
char w = 0xA;
是等效的,对于计算机来说,都是把2进制的1001赋值给了变量w
同样,1和0x1,0x01,本质上也都是一模一样的
至于在代码里到底用10进制还是16进制,看个人习惯和变量用途。
对于char的话,一般是直接用字符来赋值,比如 char a = 'a';而不是 char a = 97;问题二:
从最后一位开始,把字符串每2位,按10进制转成byte.赋值到数组即可同问题一,比如"10",得到 b[0]=0xA.本质上,和b[0]=10 b[0]=0x0A 一模一样
同样"1011",得到b[0]=0xA.b[1]=0xB.和 b[0]=10 b[1]=11 也是一模一样的