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;

解决方案 »

  1.   

    w=Integer.toHexString(n1);
    第二个你起码要说好怎么分啊,1011为什么转成AB,而不是1011?A11?10B?
      

  2.   

    楼主可以试一下Integer.toHexString(int i),可以将10进制转换成16进制,然后再进行格式上的处理。
      

  3.   


    Integer.toHexString 返回的是string 类型啊,难道再转换? 我要的是 char 型的,char w =  0x01;第二个 就是两个两个的分 如果比如1011 就是分成10 ,11 ,再转换为相应的十六进制,
    并且赋值是两位的 比如 10 十六进制为A ,我存到byte[0]里面是 0x0A,而不是0xA 
      

  4.   

    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 "";
        }
      

  5.   

    最终不是要string 类型的。int ---> char 16进制 string ---->byte[] 16进制 
      

  6.   

    第一个如果没算法要求的话,用Integer.toHexString(int i),再用toCharArray转成char数组就行了。
    要求算法优化的话最快应该是查表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就行了。
      

  7.   

    亲,你把我说糊涂了,JAVA 有16进制的概念,但是是不能通过16进制打印出来的。如果要在控制台打印出16进制字符,必须自己转换。int ---> char 16进制 是很危险的操作,因为 int 是有符号的, 而 char 是无符号的,并且转换时会丢失int的高两位字节。string ---->byte[] 16进制 。 byte 是1个字节宽度的(8位)。 16进制最多只能表示半个字节就是 4位。所以要两个16进制的数才能表示一个byte。我理解的转换就是通过string打印出来,如果只是在内存中考虑,是没有转换的概念的,因为在内存中,都是二进制表示的。请把你的需求说清楚。
      

  8.   

    正好做过类似楼主需求的东西。我做的是和串口相关的,因为发出的数据都是16进制,不知道楼主的是不是
    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()方法  转化成大写
    }
      

  9.   

    对于计算机而言,底层都是2进制,只有在转成字符呈现出来是,才有区分2进制,8进制,十进制,16进制问题一:
    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 也是一模一样的