//"二进制" 转化为 "十六进制"

void To_string(uint8 *dest,char * src,uint8 length)

{

uint8 * xad;

uint8 i = 0;

uint8 ch;

xad = src + length - 1;

for(i=0;i<length;i++,xad--)

{

ch = (*xad>>4)&0x0F;//除以16

dest[i<<1] = ch + ((ch<10)?'0':'7');

ch = *xad & 0x0F;

dest[(i<<1)+1] = ch + ((ch<10)?'0':'7');

}

}

void To_string(uint8 *dest,char *src,uint8 length) 
{
uint8 *xad;
uint8 i = 0;
uint8 ch;
xad = src + length - 1;//xad现在指到了src数组的最后一个位置(倒着来是因为符合intel小端存储的规范)
for(i = 0;i < length;i++,xad-- )
{
ch = (*xad >> 4) & 0x0F; //xad所指位置处的值右移四位再取后四位存到ch中,即把xad所指的字节的高四位存到ch中
dest[i<<1] = ch + (( ch < 10) ? '0' : '7' );
把刚才的到的ch转为十六进制存放到dest地址对应的偏移为2i的地方(i左移1位就是i*2)
为什么是2*i呢,显然这里是用一个字节来存储一个数;原来的一个char 化成二进制是8位,每四位对应一个16以内的数
ch = *xad & 0x0F;//把xad所指位置处的值取低四位存到ch中
dest[(i<<1) + 1] = ch + (( ch < 10 ) ? '0' : '7' );
把刚才的到的ch转为十六进制存放到dest地址对应的偏移为2i+1的地方
(ch + (( ch < 10 ) ? '0' : '7' );//9以内直接存,10-15需要存成A-F,加‘7’即加上37(字符‘7’的asll值),刚好就能对应到A-F,可以查一下asll表)

}
整个函数就实现了把一个内存中初始地址src,长度为length的值(按照其意图来看应该是字符串)转为一个16进制的数来存到dest所指的一片内存区域中;
如果你对这些数据类型和内存的小端方式了解,相信我的解释已经够详细了,如果你自己对这些内存操作基础并不好,那说起来就比较费劲了;

"二进制" 转化为 "十六进制的更多相关文章

  1. 二进制转化、<<、>>、>>>移位运算

    参考资料: https://www.cnblogs.com/wxb20/p/6033458.html https://www.cnblogs.com/joahyau/p/6420619.html ht ...

  2. QT 十六进制字符串转化为十六进制编码

    /*************************************************Function: hexStringtoByteArray()Description: 十六进制字 ...

  3. Python 进制转换 二进制 八进制 十进制 十六进制

    Python 进制转换 二进制 八进制 十进制 十六进制 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/python3-scale.html 全局定义一定不 ...

  4. Python进制转换(二进制/八进制/十进制/十六进制)

    Python 进制转换 二进制 八进制 十进制 十六进制 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/python3-scale.html 全局定义 ba ...

  5. 二进制转化为十进制Java实现

    二进制转化为十进制 ①按权展开方法Java实现 /* * 按权展开法 */ public static double BinToTen1(String binary) { //查找该二进制是否存在小数 ...

  6. Python 二进制 八进制 十进制 十六进制

    1.四种进制的表示方式 >>> 0b010 0b二进制 >>> 0x010 0x 十六进制 >>> 0o010 0o 八进制 >>&g ...

  7. Java中二进制字节与十六进制互转

    在Java中字节与十六进制的相互转换主要思想有两点: 1.二进制字节转十六进制时,将字节高位与0xF0做"&"操作,然后再左移4位,得到字节高位的十六进制A;将字节低位与0 ...

  8. C++二进制字符串转十六进制字符串 十六进制字符串转二进制字符串

    ============================================== 二进制转十六进制 ============================================ ...

  9. java 编码二进制写法、十六进制用源代码表示

    二进制: int a = 0b10; a其实=2 八进制: int a = 01; a其实=8 十六进制: int a = 0x1; a其实=16

随机推荐

  1. 2018.2.8 php实现qq登陆接口

    PHP实现QQ登录的原理和实现过程 2018-02-08 学习与分享 PHP自学中心 第三方登录,就是使用大家比较熟悉的比如QQ.微信.微博等第三方软件登录自己的网站,这可以免去注册账号.快速留住用户 ...

  2. Linux---cp命令学习

    cp命令 cp source_file  target_file 能够复制文件,如果target_file所指定的文件不存在,cp就创建这个文件,如果已经存在,就把文件内容清空并把source_fil ...

  3. 【luogu P1637 三元上升子序列】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1637 BIT + 离散化. 读题得数据规模需离散化.BIT开不到longint这么大的数组. 对于题目所求的 ...

  4. 初尝微信小程序1-特点

    微信小程序特点:1.不需要下载安装即可使用 2.用户用完即走,不用关心是否安装太多应用 3.应用将无处不在,随时可用 适合开发的小程序类型:1.简单的用完即走的应用 2.低频的应用 3.性能要求不高的 ...

  5. mysql安装记录

    一.创建mysql用户 useradd mysql 二.解压 tar -zxvf mysql-5.6.38.tar.gz 三.安装依赖包 yum install -y ncurses-devel li ...

  6. 安装并配置多实例Mysql数据库

    1.安装Mysql需要的依赖包 yum -y install ncurses-devel libaio-devel cmake 2.创建Mysql用户账号 useradd -s /sbin/nolog ...

  7. oracle 事务 第二弹

    一 数据库版本 SYS@LEO1>select* from v$version; BANNER ------------------------------------------------- ...

  8. keil swd设置下载stm32f103c8t6.

    1.debug选项,选择jlink,2.utilities选择jlink3.加载flash算法.4.选择swd模式,其他基本上默认,这样就可以下载了对rom和ram设置需要说明一下:1,IROM1,前 ...

  9. V4L2学习(二)结构介绍

    v4l2_device v4l2_device在v4l2框架中充当所有v4l2_subdev的父设备,管理着注册在其下的子设备.以下是v4l2_device结构体原型(去掉了无关的成员): struc ...

  10. UVA_1025 a Spy in the Metro 有向无环图的动态规划问题

    应当认为,有向无环图上的动态规划问题是动态规划的基本模型之一,对于某个模型,如果可以转换为某一有向无环图的最长.最短路径问题,则可以套用动态规划若干方法解决. 原题参见刘汝佳紫薯267页. 在这个题目 ...