A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© L10052108 中级黑马   /  2016-11-6 17:58  /  990 人查看  /  0 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

我之前做单片机进行通讯的时候,因为文本转化成十六进制费了不少的功夫,总是需要查看ascii码表,很早就有想法,写一段小程序,把十六进制转成二进制。现在我学习了java,虽说现在很少用到这些功能,还是想实现这个功能。
我的目的,是仿照串口调试助手中的.HEX 显示的功能。
我自己的程序不能这样做,我做的比较的简单。只有两个文本框
点击,转成十六进制,文本内容就会转成,相应的十六进制,在十六进制框中显示。
点击转成文本,下面文本框中的内容转成文本,在文本框中显示
下面说说代码的实现:
转成十六进制,步骤:
1,  获取文本框中的文本。
2,  把文本转化成字节
3,  每个字节计算出的十六进制数。
4,  字符串进行拼接

5,  在十六进制框中显示
[AppleScript] 纯文本查看 复制代码
   private void btnToHexActionPerformed(java.awt.event.ActionEvent evt) {                                         
        StringBuilder sb = new StringBuilder();

        // 获取文本框中的内容
        String str = this.txtChar.getText();

        // 转化成字节数组
        byte[] bys = str.getBytes();

        // 转化成二进制
        for (int x = 0; x < bys.length; x++) {
            if (bys[x] < 0x10) {
                sb.append("0x0").append(Integer.toHexString(bys[x])).append(" ");
            } else {
                sb.append("0x").append(Integer.toHexString(bys[x])).append(" ");
            }

        }

        // 显示出来
        this.TxtHex.setText(sb.toString());

    }                                        

转化成,文本
1,  读取十六进制文本框中的内容。
2,  使用正则表示式,获取每一个代表一个字节的字符串
3,  解析字符串,转化成字节
4,  把字节数组转化成字符串
5,  在文本 框中显示
[AppleScript] 纯文本查看 复制代码
private void btnToCharActionPerformed(java.awt.event.ActionEvent evt) { [/align]        // TODO add your handling code here:
        String str = this.TxtHex.getText();
   

        byte[] bys = new byte[65525];
        int index = 0;

        // 使用正则表达式,规则; 两边是边界, 0x 出现一次,后面两位是0-f大小写
        String regex = "\\b[0][x][0-9A-Fa-f]{2}\\b";

        //  把规则编译成模式
        Pattern p = Pattern.compile(regex);

        // 通过模式得到匹配器对象
        Matcher m = p.matcher(str);

        // 遍历得到索要的
        while (m.find()) {
            // System.out.println(m.group());
            // 得到字符串 只包括 0xXX 的
            String s = m.group();

            // 截取字符串
            String num = s.substring(2, 4);

            // 解析字符串,转化成十六进制
            int x = Integer.parseInt(num, 16);

            // 存储起来
            bys[index++] = (byte) x;
        }
        // 在另外一个文本框内显示
        String s = new String(bys);
        
        this.txtChar.setText(s.trim());
    }   
做的还是比较的简单,由于GUI不是基础班学习的重点,有些东西,我不是很熟悉。比如换行,图形设计等做的很不好。也不想多花费功夫。

从一定程度上说,圆了我当年的一个想法。一个盼望




把文件内容转化成十六进制.rar

11.51 KB, 阅读权限: 10, 下载次数: 2

文本和十六进制转化

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马