zoukankan      html  css  js  c++  java
  • 将txt文件数据转成bin文件.

    之前用牛逼的绘图以及分析bmp的像素文件的方法, 整理出汉字编码从: 0x4E00到0x9FA5, (维基上说是9FD5, 完了, 回头再更新吧.)

    https://en.wikipedia.org/wiki/CJK_Unified_Ideographs

    出来一个文件是这样事儿的:

    19968 一 0800080008000800080008000800080008000800080008000800080008000000
    19969 丁 0000200020002000200020042008eff720002000200020002000200000000000
    19970 丂 2000200020002c002b00e8002800280028042808280428f32000200020000000
    19971 七 080008000800080008000400fff3040404040404020402040204028700000000
    19972 丄 0004000400040004000400040004fff700040004000400040004000400040000
    19973 丅 2000200020002000200020002000efff20002000200020002000200020000000
    19974 丆 20802040202020102c002300e000200020002000200020002000200020000000
    19975 万 40084004400240814060cf10440044004404440844044cf34000400040000000
    19976 丈 0008010801080d040114012201410180ff710102010401040108010800080000
    19977 三 0002400248024802480248024802480248024802480248024802400200020000
    19978 上 000400040004000400040004fff7040404040404040404040404000400040000

    ....

    文件是1.5M

    格式是, 编码+汉字+模拟出来的点阵编码, 顺便提一句, 这个编码是根据某IC厂的编码原则去写的, 并不适用于所有的点阵扫描方式.

    接着, 把前面去掉, 变成了:

    0800080008000800080008000800080008000800080008000800080008000000
    0000200020002000200020042008eff720002000200020002000200000000000
    2000200020002c002b00e8002800280028042808280428f32000200020000000
    ...
    方便下一步处理.

    那么接下来, 要将这个都是表面上16进制编码的这些文字, 变成实际上的16进制编码文件, 也就是.bin文件(这样才能烧录到flash当中去).

    感谢小波借给我一个写flash的工具, 直接挂上一个8MB的flash, 把读到的空的bin文件倒腾出来, 用FlexHEX看了看, 想着能把之前的编码直接往里面拷贝, 结果人家直接当成utf8/ascii又转了一下.

    挠了挠头, 先用C后来直接又用Java, 把读出来的这些String的东西, 转成了byte, BYTE!!!yes!!!这就是我要的东西!!!


        public byte shortString2Hex(String shortStr) {
            String baseHext = "0123456789abcdef";
            char c = 'c';
            byte b = 0;
            String masterPosStr = shortStr.substring(0, 1);
            String lowPosStr = shortStr.substring(1);
            // System.out.println(masterPosStr + lowPosStr);
            int cValue = 16 * (baseHext.indexOf(masterPosStr)) + baseHext.indexOf(lowPosStr);
            c = (char) (16 * (baseHext.indexOf(masterPosStr)) + baseHext.indexOf(lowPosStr));
            b = (byte) cValue;
            //System.out.println(cValue);
            //System.out.println(b);
            return b;

        }

    思路很简单啊, 就是查找这个string在基准string中的位置, 将0-f转换成0-15了, 可不就是byte了么.

    然后直接把byte数组写进文件中, 文件名就以bin结尾, 然后烧录进flash, 搞定!!!

    不过还没验证呢, 烧录完了, 现在试试用STM32读取.

  • 相关阅读:
    部门创建注意问题
    我的技术博客开通啦~
    听侯钟雷老师的讲座,确认了几个问题。
    Dynamics CRM 批量添加用户时,报错:Server was unable to process request.
    汉字的Unicode范围(转)
    转载:Apache1.1 post请求无body的bug
    转载:Android有效解决加载大图片时内存溢出的问题
    2.2之前的webkit crash问题
    转载:Expect:100Continue & HTTP 417 Expectation
    城市旅游问题
  • 原文地址:https://www.cnblogs.com/Montauk/p/5788424.html
Copyright © 2011-2022 走看看