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

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. codeforces 1114C

    题目连接 : https://codeforces.com/contest/1114/problem/C 题目大意:给一个整数n(1e18>=n>=0),和一个整数k(1e12>=k ...

  2. Arguments Optional-freecodecamp算法题目

    Arguments Optional 1.要求 创建一个计算两个参数之和的 function.如果只有一个参数,则返回一个 function,该 function 请求一个参数然后返回求和的结果. 如 ...

  3. SpingBoot之多Profile文件

    1.我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml默认使用application.properties的配置: 在我们的项目开发.测 ...

  4. Http请求 GET和POST,405错误

    我就简单说吧,在用SringMVC时,我们通常会用到 @RequestMapping(value="/test",method=RequestMethod.GET) public ...

  5. 重置 nexus3 admin 密码

    2 简单 3 重构,变化很大 如何处理nexus3忘记admin密码 - CSDN博客 https://blog.csdn.net/tianya6607/article/details/5330562 ...

  6. JZOJ 5791. 【NOIP2008模拟】阶乘

    5791. [NOIP2008模拟]阶乘 (File IO): input:factorial.in output:factorial.out Time Limits: 1000 ms  Memory ...

  7. python中函数返回多个值

    用ipython运行情况如下: # 新建一个函数 In [1]: def nums(): ...: a = 11 ...: b = 22 ...: c = 33 ...: return [a,b,c] ...

  8. memset和memcpy

    void memset(void s, int ch, size_t n); 函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 ...

  9. Poj3061Subsequence

    A sequence of N positive integers (10 < N < 100 000), each of them less than or equal 10000, a ...

  10. TI C64X+通用库函数使用手册

    在使用前,当知悉以下几点: 函数进程由手动汇编而成,已充分发挥器件效率.同时TI对外提供C和线性汇编代码 对于个人一些特殊应用,DSPLIB可能会带来额外的cycle消耗 TI DSPLIB依平台和时 ...