https://blog.csdn.net/walk_ing/article/details/52712641 参考链接

1,具有A、B、C三种不同的编码类型,可提供标准ASCII中128个字元(字元,我理解的就是字符)的编码使用

2,每一个字符占11个单位表示,代码中用两个byte表示(取后11位bit)

3,Code128 字符表中有些控制字符,比如CodeA表示此字段下一个个块临时使用Code128A的字符表中的字符。

//code128编码值数组,,每一个字符占11个单位表示,代码中用两个byte表示(取后11位bit)
static uint16_t s_code128_encode_set[] ={
0x6cc,0x66c,0x666,0x498,0x48c,0x44c,0x4c8,0x4c4,0x464,0x648,
0x644,0x624,0x59c,0x4dc,0x4ce,0x5cc,0x4ec,0x4e6,0x672,0x65c,
0x64e,0x6e4,0x674,0x76e,0x74c,0x72c,0x726,0x764,0x734,0x732,
0x6d8,0x6c6,0x636,0x518,0x458,0x446,0x588,0x468,0x462,0x688,
0x628,0x622,0x5b8,0x58e,0x46e,0x5d8,0x5c6,0x476,0x776,0x68e,
0x62e,0x6e8,0x6e2,0x6ee,0x758,0x746,0x716,0x768,0x762,0x71a,
0x77a,0x642,0x78a,0x530,0x50c,0x4b0,0x486,0x42c,0x426,0x590,
0x584,0x4d0,0x4c2,0x434,0x432,0x612,0x650,0x7ba,0x614,0x47a,
0x53c,0x4bc,0x49e,0x5e4,0x4f4,0x4f2,0x7a4,0x794,0x792,0x6de,
0x6f6,0x7b6,0x578,0x51e,0x45e,0x5e8,0x5e2,0x7a8,0x7a2,0x5de,
0x5ee,0x75e,0x7ae,0x684,0x690,0x69c,0x18EB
};

#define CODE128_MEX_LEN 30
static uint16_t code128_temp[CODE128_MEX_LEN] = {0};
#define CODE128_ONE_ELEMENT_SIZE 11

STATUS_TYPE code128C_encode(const uint8_t *src,uint8_t length,uint8_t *out)
{
int i = 0;
int j = 0;
uint8_t chr_temp = 0;
uint32_t check_digit = 0;
uint16_t *p_out = code128_temp;
memset(code128_temp,0,CODE128_MEX_LEN);

p_out[0] = 0x69c;
p_out++;
check_digit += 105;

for(i = 0,j = 0;i < length;i += 2,j++ )
{
if(src[i] < '0' || src[i] > '9' || src[i+1] < '0' || src[i+1] > '9')
{
return STATUS_INVALID_CHAR;
}

chr_temp = (src[i] - '0')*10 + src[i + 1] - '0';
check_digit += (j + 1)*chr_temp;

p_out[j] = s_code128_encode_set[chr_temp];

}

check_digit %=103;

p_out[j] = s_code128_encode_set[check_digit];
p_out[j+1] = 0x18EB;

return STATUS_OK;
}

 

上面的代码实现,对照 Code128编码表 去看,很容易看懂了。

附录:网上的编码值都是表示成:bbsbbssbbss,需要转换成对应的数值:0x6cc,通过计算器去转太麻烦了,而且还容易出错,所以,写了个MFC dialog程序去做(很简单)。

可以去“文件”页下载(code128_convert.rar

code128 C语言实现的更多相关文章

  1. C#-利用ZPL语言完毕条形码的生成和打印

     近期由于公司项目的须要,研究了一项对我来说算是新的技术-条形码的生成和打印.由于之前没有接触过这方面的知识,所以刚開始还有点小迷茫和小兴奋,只是一步一步来,问题总会解决的.如今来总结一下做条形码 ...

  2. C# vb .NET读取识别条形码线性条码code128

    code128是比较常见的条形码编码规则类型的一种.如何在C#,vb等.NET平台语言里实现快速准确读取该类型条形码呢?答案是使用SharpBarcode! SharpBarcode是C#快速高效.准 ...

  3. C语言 · 高精度加法

    问题描述 输入两个整数a和b,输出这两个整数的和.a和b都不超过100位. 算法描述 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储.对于这种问题,一般使用数组来处理. 定义一个数组A ...

  4. Windows server 2012 添加中文语言包(英文转为中文)(离线)

    Windows server 2012 添加中文语言包(英文转为中文)(离线) 相关资料: 公司环境:亚马孙aws虚拟机 英文版Windows2012 中文SQL Server2012安装包,需要安装 ...

  5. iOS开发系列--Swift语言

    概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...

  6. C语言 · Anagrams问题

    问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的.例如,"Unclear"和"Nuclear ...

  7. C语言 · 字符转对比

    问题描述 给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一: 1:两个字符串长度不等.比如 Beijing 和 Hebei 2:两个字符串不仅长度相 ...

  8. JAVA语言中的修饰符

    JAVA语言中的修饰符 -----------------------------------------------01--------------------------------------- ...

  9. Atitit 项目语言的选择 java c#.net  php??

    Atitit 项目语言的选择 java c#.net  php?? 1.1. 编程语言与技术,应该使用开放式的目前流行的语言趋势1 1.2. 从个人职业生涯考虑,java优先1 1.3. 从项目实际来 ...

随机推荐

  1. Java学习笔记(十四):java常用的包

  2. Django 学生信息 添加 功能 遇到的问题.

    1  添加 班级信息时的问题 (grade为外键) 原因是 grade 必需接收 一个 实例, 而我交是一个 str字符串, if request.method == 'POST': data = { ...

  3. javascript实现文字逐渐显现

    下面是文字逐渐显现的JS代码<pre id="wenzi"></pre><div style="display:none" id= ...

  4. FortiGate日常检查

    1.1)CPU利用率:由于防火墙有芯片,正常的流量都走芯片转发,不走cpu,只有开了utm相关的应用层防护功能和DDOS之类的,才会走cpu,所以一般cpu都不会占用太多,甚至很多时间都是0%, 如果 ...

  5. Linux安装配置Redis,CentOS7下安装Redis教程

    1.下载Redis wget https://download.redis.io/releases/redis-3.0.4.tar.gz 2 . 解压Redis .tar.gz 3 . 编译安装Red ...

  6. springboot restful接口服务异常处理

    一.spring boot中默认的错误处理机制 二.自定义的异常处理

  7. PHP 获取周,月列表

    PHP的date函数以及strtotime函数是很强大的.基本上围绕这2个函数就能处理绝大多数日常开发中日期的处理. 假设有一个需求是按周,月获取最近7周和最近7月的查询.那么我们肯定要划分出时间区间 ...

  8. Difference Among Mercedes Star Diagnostic Tool MB Star C3 C4 C5 C6

    Mercedes Star Diagnostic Tool newly update to MB Star C6.There are many star diangostic tool in the ...

  9. linux学习第八天 (Linux就该这么学)

    今天学了,mount 挂载,umount撤销挂载,.fdisk 命令 管理硬盘 交换分区swap,硬盘配额 xfs_quota命令 今天工作,手机看了,看的不全,回头看录播了.

  10. 网络传输 buf 封装 示例代码

    网络传输 buf 封装 示例代码 使用boost库 asio // BufferWrapTest.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h&quo ...