1. /*BCD 与 ASCII码转换*/
  2. /*******************************************************************
  3. 函数名:  asc2bcd
  4. 功能描述:将ascii码转换为bcd码
  5. 参数:
  6. bcd:转换后的BCD码
  7. asc:需转换的ASCII码串
  8. len:需转换的ascii码串长度
  9. 返回值:  uint32
  10. 0:成功
  11. 其他:失败
  12. ********************************************************************/
  13. uint32 asc2bcd(uint8* bcd, const uint8* asc, uint32 len);
  14. /*******************************************************************
  15. 函数名: bcd2asc
  16. 功能描述:将bcd码转换为ascii码串
  17. 参数:
  18. asc:转换的ASCII码串
  19. bcd:需转换的BCD码
  20. len:需转换的BCD码长度
  21. 返回值:  uint32
  22. 0:成功
  23. 其他:失败
  24. ********************************************************************/
  25. uint32 bcd2asc(uint8* asc, const uint8* bcd, uint32 len);
  1. #include <assert.h>
  2. #include "utils.h"
  3. //基于查表实现BCD与Ascii之间的转换
  4. static uint8 bcd2ascii[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
  5. static uint8 ascii2bcd1[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  6. static uint8 ascii2bcd2[6]  = {0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F};
  1. uint32
  2. ASC2BCD(uint8 *bcd, const uint8 *asc, uint32 len)
  3. {
  4. uint8 c = 0;
  5. uint8 index = 0;
  6. uint8 i = 0;
  7. len >>= 1;
  8. for(; i < len; i++) {
  9. //first BCD
  10. if(*asc >= 'A' && *asc <= 'F') {
  11. index = *asc - 'A';
  12. c  = ascii2bcd2[index] << 4;
  13. } else if(*asc >= '0' && *asc <= '9') {
  14. index = *asc - '0';
  15. c  = ascii2bcd1[index] << 4;
  16. }
  17. asc++;
  18. //second BCD
  19. if(*asc >= 'A' && *asc <= 'F') {
  20. index = *asc - 'A';
  21. c  |= ascii2bcd2[index];
  22. } else if(*asc >= '0' && *asc <= '9') {
  23. index = *asc - '0';
  24. c  |= ascii2bcd1[index];
  25. }
  26. asc++;
  27. *bcd++ = c;
  28. }
  29. return 0;
  30. }
  1. uint32
  2. BCD2ASC (uint8 *asc, const uint8 *bcd, uint32 len)
  3. {
  4. uint8 c = 0;
  5. uint8 i;
  6. for(i = 0; i < len; i++) {
  7. //first BCD
  8. c = *bcd >> 4;
  9. *asc++ = bcd2ascii[c];
  10. //second
  11. c = *bcd & 0x0f;
  12. *asc++ = bcd2ascii[c];
  13. bcd++;
  14. }
  15. return 0;
  16. }
    1. int main(void)//测试程序
    2. {
    3. const unsigned char ascii[12] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C'};
    4. unsigned char bcd[6];
    5. ASC2BCD(bcd, ascii, 12, 0);
    6. int i = 0;
    7. printf("ascii = %s\n", ascii);
    8. for(; i < 6; i++) {
    9. printf("bcd = 0x%.2x\n", bcd[i]);
    10. }
    11. /*
    12. unsigned char ascii[13] = {0};
    13. const unsigned char bcd[6] = {0x01, 0x23, 0x45, 0xCD, 0xEF, 0xAB};
    14. BCD2ASC(ascii, bcd, 6, 0);
    15. printf("ascii = %s\n", ascii);
    16. */
    17. return 0;
    18. }

BCD与ASCII码互转-C语言实现的更多相关文章

  1. [PHP] chr和ord函数实现字符串和ASCII码互转

    chr和ord函数是用来字符串和ASCII码互转的.  ASCII码是计算机所能显示字符的编码,它的取值范围是0-255,其中包括标点.字母.数字.汉字等.在编程过程中,经常把指定的字符转化为ASCI ...

  2. 用php的chr和ord函数实现字符串和ASCII码互转

    http://shenyongqang.blog.163.com/blog/static/22439113201002941856838/ chr和ord函数是用来字符串和ASCII码互转的. ASC ...

  3. 将一个字符与对应Ascii码互转

    package nicetime.com.practies; /** * Java中将一个字符与对应Ascii码互转 1 byte = 8bit 可以表示 0-127 */public class G ...

  4. java 字符与ASCII码互转

    字符转对应ASCII码 // 方法一:将char强制转换为byte char ch = 'A'; byte byteAscii = (byte) ch; System.out.println(byte ...

  5. js 字符与ASCII码互转

    将字符转为ASCII码 var str = "A"; str.charCodeAt(); var str1 = 'a'; str1.charCodeAt(); 将ASCII码转为字 ...

  6. Java字符串跟ASCII码互转

    1.由于项目中遇到,在服务器端起的jar包程序,给前台发消息后,前段收到的消息出现乱码情况,所以采取在后才发消息前先把消息字符串转成ASCII码再发往前台,前台采取在收到后台消息先把ASCII码转成字 ...

  7. js字符与ASCII码互转的方法

    大写字母A-Z对应的ASCII码值是65-90 小写字母a-z对应的ASCII码值是97-122 将字母转为ascii码的方法: 将ascii码转为对应字母的方法:

  8. C语言 16进制与ascii码互转

    /*把ASCII字符转换为16进制 */ uint8_t char_to_hex(const uint8_t *ch) { uint8_t value = 0; if(*ch >= 0 & ...

  9. 排坑&#183;ASCII码为160的空格(nbsp)

    阅文时长 | 2.83分钟 字数统计 | 1345.2字符 『排坑·ASCII码为160的空格(nbsp)』 编写人 | SCscHero 编写时间 | Wednesday, September 9, ...

随机推荐

  1. linux基础命令--lsof

    lsof(list open files)作用: 是一个列出当前系统打开文件的工具. 注: 在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root ...

  2. nfs存储服务实时同步

    一.NFS简介 NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过网络共享资源.将NFS主机分享的目录,挂载到本地客户端当中,本地NFS的客户端应用可以透明地 ...

  3. 用java imageio调整图片DPI,例如从96调整为300

    因项目需求把图片的DPI值提升到300,否则OCR识别产生错乱:直接上源码:1.图片处理接口: package util.image.dpi; import java.awt.image.Buffer ...

  4. git 清除缓存

    清除git缓存 git config --local --unset credential.helper git config --global --unset credential.helper g ...

  5. 部署jumpserver

    参考:https://jumpserver.readthedocs.io/zh/master/setup_by_centos7.html yum update -y systemctl start f ...

  6. 微信公众号发送告警Python脚本

    调用该脚本,可以向微信公众号发生告警. #!/bin/env python #coding:utf-8 #Author: Hogan #Descript : 微信公众号发送告警脚本 import ur ...

  7. html caption标签 语法

    html caption标签 语法 caption是什么标签? 作用:定义表格标题. 说明:caption 标签必须紧随 table 标签之后.您只能对每个表格定义一个标题.通常这个标题会被居中于表格 ...

  8. String,Integer,int类型之间的相互转换

    String, Integer, int 三种类型之间可以两两进行转换 1. 基本数据类型到包装数据类型的转换 int -> Integer (两种方法) Integer it1 = new I ...

  9. 【python学习之五】自定义函数实现用 Python 发送电子邮件

    前言 之前论坛里有人发过关于发送邮件的帖子,设计器也有关于发送邮件的控件.我这里再次重复,希望能有帮到大家的地方. 信息准备 发送邮件前必须准备好一些基本信息,例如发件人邮箱地址.发件人邮箱密码.收件 ...

  10. (61)C语言预处理命令详解

    一  前言 预处理(或称预编译)是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作.预处理指令指示在程序正式编译前就由编译器进行的操作,可放在程序中任何位置. 预处理是C语言的一个重要功能 ...