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

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. 如何在Mac上创建.txt文件

    cd ~/Desktoptouch test.txt cd 需要创建的文件夹目录vi 需要创建文件的文件名.txt

  2. .net core 2.2跨域session

    不说废话,直奔主题! 使用场景:微服务.前后端已经跨域.又不得不使用session 使用session的好处:此处省略若干字...... 做法: 客户端:该怎么写就怎么写. 服务端: Startup类 ...

  3. 小波变换(wavelet transform)的通俗解释(一)

    小波变换 小波,一个神奇的波,可长可短可胖可瘦(伸缩平移),当去学习小波的时候,第一个首先要做的就是回顾傅立叶变换(又回来了,唉),因为他们都是频率变换的方法,而傅立叶变换是最入门的,也是最先了解的, ...

  4. C# StreamReader对象

    1.读取文件 输入流用于从外部源读取数据,在很多情况下,数据源可以是磁盘上的文件或网络的某些位置,任何可能发送数据的位置都可以是数据源,比如网络应用程序,web服务,甚至是控制台.StreamRead ...

  5. Oracle 配置文件目录

    Oracle 配置文件目录 ① 在oracle安装目录下,找D:\oracle\product\10.2.0\client_1\NETWORK\ADMIN中的tnsnames.ora文件,找到之后,配 ...

  6. display :inline-block 处理点小障碍

    使用inline-block之前先处理点小障碍:inline-block元素会有4px左右的空隙,这个是因为我们写代码时候的换行符所致. 解决办法很简单:在inline-block的父元素中设置样式f ...

  7. APCInject

    #include <iostream> #include <Windows.h> #include <TlHelp32.h> using namespace std ...

  8. 【NTT】bzoj3992: [SDOI2015]序列统计

    板子题都差点不会了 Description 小C有一个集合S,里面的元素都是小于M的非负整数.他用程序编写了一个数列生成器,可以生成一个长度为N的数 列,数列中的每个数都属于集合S.小C用这个生成器生 ...

  9. centos下 将(jgp、png)图片转换成webp格式

    由于项目要求需要将jpg.png类型的图片  转换成webp格式,最开始使用了php gd类库里 imagewebp 方法实现,结果发现转换成的webp格式文件会偶尔出现空白内容的情况.像创建了一个透 ...

  10. node 发送邮件demo (QQ邮箱)

    nodemailer是nodejs中的邮件发送模块,本文使用的版本为2.5.0 --下载模块 npm install nodemailer npm下载模块后,在项目中引入就可以使用: var node ...