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

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. 【转】svn图标不显示的解决方案

    最近发现svn图标莫名其妙的不显示,其他操作都正常.在网上搜了一些方法. 解决方法一(失败): 升级最新版本,我的本来就是最新版本 解决方法二(失败): 右键->TortoiseSVN-> ...

  2. 流行JAVA开发工具

    流行JAVA开发工具 正所谓工欲善其事必先利其器,我们在开发java语言过程中同样需要依款不错的开发工具,目前市场上的IDE很多,本文为大家推荐以下下几款java开发工具: Eclipse(推荐):另 ...

  3. 多种语言书写 “ HelloWorld ”

    最基本的C: #include<stdio.h> int main(int argc, char const *argv[]) { printf("HelloWorld\n&qu ...

  4. 【解题报告】AtCoder ABC115 (附英文题目)

    ------------------------------迟到的AK---------------------------------- A - Christmas Eve Eve Eve Time ...

  5. pycharm永久激活记录

    由于上一年安装的pycharm激活时是用的激活码,有期限的,一直到今年5月4日过期,这两天顺便把版本也更新到最新,一直用的free版,到今天提醒我free快到期了,所以才狠下心来去找解决方案,目前已经 ...

  6. MySQL - UNION 和 UNION ALL 操作符

    UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每条 SE ...

  7. forEach 以及 IE兼容

      语法 array.forEach(function(currentValue, index, arr), thisValue) 参数 参数 描述 function(currentValue, in ...

  8. python简单试题4

    ( ps : 题目中用到的一些random函数在最后末尾处有介绍)  1,在屏幕上显示跑马灯文字 import os # 调用os模块 import time # 调用时间模块 def main(): ...

  9. web开发框架Flask学习二

    jinja2模板规范 在当前项目中创建一个文件为templates的文件夹,将其设置为模板文件夹,新建的html为模板页面, 在视图函数中使用render_template(".html的文 ...

  10. linux的发展过程

    1. 操作系统 人与计算机硬件直接的中介 2. Linux系统组成 3. Linux的发展过程 蛋-人-人-人 unix于诞生贝尔实验室 人-谭教授 谭宁邦 minix mini unix. 主要用于 ...