首页 > 其他分享 >“16*16逐行式顺向阴码”转“16*16列行式逆向阴码”字模C代码

“16*16逐行式顺向阴码”转“16*16列行式逆向阴码”字模C代码

时间:2024-09-30 09:45:42浏览次数:1  
标签:24 16 0x00 0x02 output input 逐行 阴码

前段时间做的项目,从HZK16字库中读取的字模数据是16*16逐行式顺向格式的,传输给客户的设备无法显示,他们那边不能改变OLED屏显示的方式,所以写了一个简单的字模转换算法;

HZK16的读取网上一搜就是一大堆,所以这里就不贴这串代码了;

测试的时候可以使用PCtoLCD工具生成两种不同格式的字模数据对转换后的字模数据进行校对;

{0x02,0x00,0x01,0x00,0x7F,0xFE,0x40,0x02,0x80,0x04,0x1F,0xE0,0x00,0x40,0x00,0x80},
{0x01,0x00,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00},/*"字",0*/

{0x10,0x0C,0x04,0x24,0x24,0x24,0x25,0x26,0xA4,0x64,0x24,0x04,0x04,0x14,0x0C,0x00},

{0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00},/*"字",0*/

================================================================================================================

软件代码:

代码复制到C-Free可以直接使用

#include "stdio.h"
#include "string.h"
#include "stdlib.h"

#define T 0X80
void reverseAndConvert(unsigned char *input, unsigned char *output) 
{
    int i = 0;
    for(i = 0;i<8;i++)
    {
        output[i] = ((input[0]&T>>i)<<i)>>7;
        output[i] += ((input[2]&T>>i)<<i)>>6;
        output[i] += ((input[4]&T>>i)<<i)>>5;
        output[i] += ((input[6]&T>>i)<<i)>>4;
        output[i] += ((input[8]&T>>i)<<i)>>3;
        output[i] += ((input[10]&T>>i)<<i)>>2;
        output[i] += ((input[12]&T>>i)<<i)>>1;
        output[i] += ((input[14]&T>>i)<<i);
        
        output[i+8] = ((input[1]&T>>i)<<i)>>7;
        output[i+8] += ((input[3]&T>>i)<<i)>>6;
        output[i+8] += ((input[5]&T>>i)<<i)>>5;
        output[i+8] += ((input[7]&T>>i)<<i)>>4;
        output[i+8] += ((input[9]&T>>i)<<i)>>3;
        output[i+8] += ((input[11]&T>>i)<<i)>>2;
        output[i+8] += ((input[13]&T>>i)<<i)>>1;
        output[i+8] += ((input[15]&T>>i)<<i);
        
        output[i+16] = ((input[16]&T>>i)<<i)>>7;
        output[i+16] += ((input[18]&T>>i)<<i)>>6;
        output[i+16] += ((input[20]&T>>i)<<i)>>5;
        output[i+16] += ((input[22]&T>>i)<<i)>>4;
        output[i+16] += ((input[24]&T>>i)<<i)>>3;
        output[i+16] += ((input[26]&T>>i)<<i)>>2;
        output[i+16] += ((input[28]&T>>i)<<i)>>1;
        output[i+16] += ((input[30]&T>>i)<<i);
        
        output[i+24] = ((input[17]&T>>i)<<i)>>7;
        output[i+24] += ((input[19]&T>>i)<<i)>>6;
        output[i+24] += ((input[21]&T>>i)<<i)>>5;
        output[i+24] += ((input[23]&T>>i)<<i)>>4;
        output[i+24] += ((input[25]&T>>i)<<i)>>3;
        output[i+24] += ((input[27]&T>>i)<<i)>>2;
        output[i+24] += ((input[29]&T>>i)<<i)>>1;
        output[i+24] += ((input[31]&T>>i)<<i);
    }
}
/*
字模格式:阴码、顺向、逐行式、16X16
{0x02,0x00,0x01,0x00,0x7F,0xFE,0x40,0x02,0x80,0x04,0x1F,0xE0,0x00,0x40,0x00,0x80,
0x01,0x00,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00}

字模格式:阴码、逆向、列行式、16X16 
{0x10,0x0C,0x04,0x24,0x24,0x24,0x25,0x26,0xA4,0x64,0x24,0x04,0x04,0x14,0x0C,0x00,
0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00}
*/
int main(void)
{
    unsigned char in_char[32] = {0x02,0x00,0x01,0x00,0x7F,0xFE,0x40,0x02,0x80,0x04,0x1F,0xE0,0x00,0x40,0x00,0x80, 
                                0x01,0x00,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00};
    unsigned char out_char[32] = {0};                
    
    int i = 0;
    reverseAndConvert(in_char,out_char);
    
    printf("in_char:\n");
    for(i = 0; i < 32; i++)
    {
        printf("%02x ",in_char[i]);
    }
    printf("\nout_char:\n");
    for(i = 0; i < 32; i++)
    {
        printf("%02x ",out_char[i]);
    }
    printf("\n");
    return 0;
}

代码运行结果:

 

软件很简单,希望对大家有用

 

标签:24,16,0x00,0x02,output,input,逐行,阴码
From: https://www.cnblogs.com/xiaoxiaoclassments/p/18441224

相关文章

  • 【leetcode】169.多数元素
    boyer-moore算法最简单理解方法:假设你在投票选人如果你和候选人(利益)相同,你就会给他投一票(count+1),如果不同,你就会踩他一下(count-1)当候选人票数为0(count=0)时,就换一个候选人,但因为和你利益一样的人占比超过了一半不论换多少次,最后留下来的都一定是个和你(利益)相同的人。代码:......
  • [leetcode]516_最长回文子序列
    给你一个字符串s,找出其中最长的回文子序列,并返回该序列的长度。子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。示例1:输入:s="bbbab"输出:4解释:一个可能的最长回文子序列为"bbbb"。示例2:输入:s="cbbd"输出:2解释:一个......
  • 《最终幻想16》游戏启动时崩溃弹窗“找不到api-ms-win-core-com-l1-1-0.dll”文件该怎
    当启动《最终幻想16》时,游戏崩溃并弹窗显示“找不到api-ms-win-core-com-l1-1-0.dll”文件,这严重影响了游戏体验。现在为您细致剖析修复此问题的具体方法,助您顺利解决,畅玩游戏。本篇将为大家带来《最终幻想16》游戏启动时崩溃弹窗“找不到api-ms-win-core-com-l1-1-0.dll”文件......
  • 南沙C++信奥赛陈老师解一本通题 1973:【16NOIP普及组】买铅笔
    ​ 【题目描述】P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物。她发现商店一共有3种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。为了公平起见,P老师决定只买同一种包装的铅笔。商店不允许将铅笔的包装拆开,因此P老师可能需要购买超过n支铅笔才够给小......
  • 通讯过程中16进制字符和byte[]/十进制和16进制转换(一)
    ///<summary>///16进制字符转为字节流///</summary>///<paramname="str"></param>///<paramname="fromBase"></param>///<returns></returns>......
  • 16.微服务hystrix解析部署使用全流程
    目录1、什么是hystrix?2、Hystrix作用3、Hystrix使用场景4、准备工作5、应用1、引入依赖2、开启Hystrix3、添加熔断6、添加仪表盘【了解,功能单一使用少】添加依赖添加配置类HystrixConfig启动项目,访问如下地址​编辑注意:1、什么是hystrix?是一个做熔断的框架......
  • CF1648D Serious Business题解
    题目链接关键:DP状态的设计\(dp[i]\)表示走到\((2,i)\)的最小价值。转移分类讨论只用一个区间\(i\)从\([li,x]\)选择位置向下拐\(dp[i]=max_{li\lek\lex}(sum[1][k]+sum[2][x]-sum[2][k-1]+v[i])\)使用别的区间显然转移点小于\(li\),不然用一个区间即可。\(dp[i]=max_......
  • 推出TMS320VC5416GWS120、TMS320VC5416PGE160、TMS320VC5416ZWS160定点数字信号处理器
    系列概述:TMS320VC5416定点数字信号处理器(DSP)基于先进的改进型哈佛架构打造,具有一条程序存储器总线和三条数据存储器总线。该处理器采用具有高并行能力的算术逻辑单元(ALU)、特定于应用的硬件逻辑、片上存储器和附加片上外设。高度专业化的指令集是TMS320VC5416操作灵活性和速度的基......
  • 代码随想录算法训练营Day16 | 513.找树左下角的值、112.路径总和、113.路径总和Ⅱ、10
    目录513.找树左下角的值112.路径总和113.路径总和Ⅱ106.从中序与后序遍历序列构造二叉树105.从前序与中序遍历序列构造二叉树513.找树左下角的值题目513.找树左下角的值-力扣(LeetCode)给定一个二叉树的根节点root,请找出该二叉树的最底层最左边节点的值。假......
  • 基于Java&MYSQL&Android的商品比价软件设计与实现20516-计算机毕设定制原创选题推荐(附
                                                 目 录摘要1绪论1.1开发背景1.2研究现状1.3论文结构与章节安排2 商品比价软件APP系统分析2.1可行性分析2.2......