code128 C语言实现

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

转载于:https://www.cnblogs.com/zy-slient/p/10598526.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值