黑马程序员技术交流社区

标题: 关于指定编码编码表的问题 [打印本页]

作者: Zero霖    时间: 2014-3-27 11:05
标题: 关于指定编码编码表的问题
String类的教学视频中毕老师有提到"字符串和字节数组在转换过程中是可以指定编码表的",由于没有细说,所以不懂这句话是什么意思,还有就是该如何指定编码表?
作者: Up↑Lee↗    时间: 2014-3-27 11:14
不知道你是不是问的这块内容,以进制转换程序为例,可以事先编好表,进行匹配
class ArrayTest6
{
        public static void main(String[] args)
        {
//                toHex(60);
                toBin(-6);
        }

        public static void toBin(int num)
        {
                //定义二进制的表。
                char[] chs = {'0','1'};

                //定义一个临时存储容器。
                char[] arr = new char[32];

                //定义一个操作数组的指针
                int pos = arr.length;

                while(num!=0)
                {
                        int temp = num & 1;

                        arr[--pos] = chs[temp];

                        num = num >>> 1;
                }

                for(int x=pos; x<arr.length; x++)
                {
                        System.out.print(arr[x]);
                }
        }


        /*
                0 1 2 3 4 5 6 7 8 9 A  B  C   D  E  F  ==十六进制中的元素。
                0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

                查表法:将所有的元素临时存储起来。建立对应关系。
                每一次&15后的值作为索引去查建立好的表。就可以找对应的元素。
                这样比 -10+'a'简单的多。

                这个表怎么建立呢?
                可以通过数据的形式来定义。
        */

        public static void toHex(int num)
        {
                char[] chs = {'0','1','2','3'
                                        ,'4','5','6','7'
                                        ,'8','9','A','B'
                                        ,'C','D','E','F'};
               
                //定义一个临时容器。
                char[] arr = new char[8];
                int pos = arr.length;

                while(num!=0)
                {
                        int temp = num & 15;
                       
                        //System.out.println(chs[temp]);
                        arr[--pos] = chs[temp];
                       

                        num = num >>> 4;
                }
                System.out.println("pos="+pos);
                //存储数据的arr数组遍历。
                for(int x=pos;x<arr.length; x++)
                {
                        System.out.print(arr[x]+",");
                }

        }
}



作者: syusikoku    时间: 2014-3-27 16:53
以前学习的笔记,发给你看一下,希望能帮的上你。
  1. /**
  2.   * @param args
  3.   */
  4. /**
  5.   * 编码与解码复习:
  6.   * ASCII:一个字符用一个字节的7位表示,用0开头。
  7.   * ISO8859-1:拉丁码表。欧洲,所有字符字符用一个字节来表示。其实它也是ASCII码表。
  8.   * Unicode:国际标准码表。
  9.   * GBK:所有字符用两个字节来表示。仅限于中文的字符串。
  10.   * GBK 2312:GBK的扩展版本。有2万多个汉字。
  11.   * UTF-8:所有字符一个字节能表示的,就用一个字节来表示,一个字节表示不了的,就用两个字节来表示,
  12.   *  两个字节表示不了的,就用三个字节来表示。
  13.   * @throws IOException
  14.   * **/
  15. public static void main(String[] args) throws IOException {
  16.   /**
  17.    * 简单的编码与解码练习:
  18.    *    字符串===>>>>字节数组
  19.    * */
  20.   String s="你好";
  21.   //使默认编码表进行编码
  22. //  byte [] buf=s.getBytes();
  23.   //使用GBK编码表
  24. //  byte [] buf=s.getBytes("GBK");
  25.   //使用UTF-8编码表
  26.   byte [] buf=s.getBytes("UTF-8");
  27. //  printBuf(buf);
  28.       
  29.   
  30.   /**
  31.    * 解码:
  32.    *    字节数组====>>>字符串
  33.    *     使用String的构造函数就能完成
  34.    * */
  35.   //使用默认编码表
  36. //  String news=new String(buf);
  37.   //使用GBK编码表
  38. //  String news=new String(buf,"GBK");
  39.   //使用UTF-8编码表
  40.   String news=new String(buf,"UTF-8");
  41.   System.out.println(news);
  42. }
  43. private static void printBuf(byte[] buf) {
  44.   for(byte b:buf){
  45.    System.out.println(b);
  46.   }
  47. }
  48. }
复制代码



作者: Zero霖    时间: 2014-3-27 21:15
syusikoku 发表于 2014-3-27 16:53
以前学习的笔记,发给你看一下,希望能帮的上你。

哦!我知道了!谢谢啦~
作者: Zero霖    时间: 2014-3-27 21:16
Up↑Lee↗ 发表于 2014-3-27 11:14
不知道你是不是问的这块内容,以进制转换程序为例,可以事先编好表,进行匹配
class ArrayTest6
{

这个是查表法,跟我的问题好像没有太大关系,不过还是谢谢啦!辛苦啦~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2