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读取.

  • 相关阅读:
    165. Compare Version Numbers
    164. Maximum Gap
    3、桶排序
    162. Find Peak Element
    160. Intersection of Two Linked Lists
    155. Min Stack
    154. Find Minimum in Rotated Sorted Array II
    153. Find Minimum in Rotated Sorted Array
    Linux/Unix系统编程手册 第二章:基本概念
    Linux/Unix系统编程手册 第一章:历史和标准
  • 原文地址:https://www.cnblogs.com/Montauk/p/5788424.html
Copyright © 2011-2022 走看看