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. 炸弹:线段树优化建边+tarjan缩点+建反边+跑拓扑

    这道题我做了有半个月了...终于A了... 有图为证 一句话题解:二分LR线段树优化建边+tarjan缩点+建反边+跑拓扑统计答案 首先我们根据题意,判断出来要炸弹可以连着炸,就是这个炸弹能炸到的可以 ...

  2. PS使用滤镜制作光晕效果

    滤镜制作光晕效果 新建图层,将背景色填充为黑色 滤镜->渲染->镜头光晕 调整好光晕大小 通过滤色(图层两字下面一点点的位置,有个下拉菜单,点开就在里面),去黑留白 如果觉得光线不够,可以 ...

  3. 5. ClustrixDB SQL语法

    CustrixDB支持的DML语法 SELECT, DISTINCT, [LEFT | RIGHT | OUTER] JOIN, STRAIGHT_JOIN UNION, HAVING, GROUP ...

  4. Codeforces 919D Substring ( 拓扑排序 && DAG上的DP )

    题意 : 给出含有 N 个点 M 条边的图(可能不连通或者包含环),每个点都标有一个小写字母编号,然后问你有没有一条路径使得路径上重复字母个数最多的次数是多少次,例如图上有条路径的顶点标号顺序是  a ...

  5. JUnit——Annotation

    Annotation是对属性,方法或者类做一个标记  比如@override表示复写了父类中的方法 [1]@Test: 测试方法(说明该方法为测试方法) a)(expected=XXException ...

  6. 配置文件:android:inputType参数类型说明

    输入字符 android:inputType="none"  --输入普通字符  android:inputType="text" --输入普通字符  andr ...

  7. The GuidRepresentation for the reader is CSharpLegacy, which requires the binary sub type to be Uuid

    使用客户端链接MongoDb报错 The GuidRepresentation for the reader is CSharpLegacy, which requires the binary su ...

  8. cpp 实现简易String类

    需求 实现一个String类 自己写的String headers/String.h #ifndef __MYSTRING__ #define __MYSTRING__ #include <st ...

  9. Navicat使用与python操作数据库

    一.Navicat使用 1.下载地址: <https://pan.baidu.com/s/1bpo5mqj> 2.测试+链接数据库,新建库 3.新建表,新增字段+类型+约束 4.设计表:外 ...

  10. 今天跟outlook顶上牛了

    之前使用的是2007,然后之前弄东西的时候给升到2010了,之前就是把所有的邮件都保存到本地的文件中,我还想使用之前的文件,然后2010就是不好使,后来查了半天发现原来是需要手动创建账户,参考http ...