"二进制" 转化为 "十六进制
//"二进制" 转化为 "十六进制"
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所指的一片内存区域中;
如果你对这些数据类型和内存的小端方式了解,相信我的解释已经够详细了,如果你自己对这些内存操作基础并不好,那说起来就比较费劲了;
"二进制" 转化为 "十六进制的更多相关文章
- 二进制转化、<<、>>、>>>移位运算
参考资料: https://www.cnblogs.com/wxb20/p/6033458.html https://www.cnblogs.com/joahyau/p/6420619.html ht ...
- QT 十六进制字符串转化为十六进制编码
/*************************************************Function: hexStringtoByteArray()Description: 十六进制字 ...
- Python 进制转换 二进制 八进制 十进制 十六进制
Python 进制转换 二进制 八进制 十进制 十六进制 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/python3-scale.html 全局定义一定不 ...
- Python进制转换(二进制/八进制/十进制/十六进制)
Python 进制转换 二进制 八进制 十进制 十六进制 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/python3-scale.html 全局定义 ba ...
- 二进制转化为十进制Java实现
二进制转化为十进制 ①按权展开方法Java实现 /* * 按权展开法 */ public static double BinToTen1(String binary) { //查找该二进制是否存在小数 ...
- Python 二进制 八进制 十进制 十六进制
1.四种进制的表示方式 >>> 0b010 0b二进制 >>> 0x010 0x 十六进制 >>> 0o010 0o 八进制 >>&g ...
- Java中二进制字节与十六进制互转
在Java中字节与十六进制的相互转换主要思想有两点: 1.二进制字节转十六进制时,将字节高位与0xF0做"&"操作,然后再左移4位,得到字节高位的十六进制A;将字节低位与0 ...
- C++二进制字符串转十六进制字符串 十六进制字符串转二进制字符串
============================================== 二进制转十六进制 ============================================ ...
- java 编码二进制写法、十六进制用源代码表示
二进制: int a = 0b10; a其实=2 八进制: int a = 01; a其实=8 十六进制: int a = 0x1; a其实=16
随机推荐
- 【转】svn图标不显示的解决方案
最近发现svn图标莫名其妙的不显示,其他操作都正常.在网上搜了一些方法. 解决方法一(失败): 升级最新版本,我的本来就是最新版本 解决方法二(失败): 右键->TortoiseSVN-> ...
- 流行JAVA开发工具
流行JAVA开发工具 正所谓工欲善其事必先利其器,我们在开发java语言过程中同样需要依款不错的开发工具,目前市场上的IDE很多,本文为大家推荐以下下几款java开发工具: Eclipse(推荐):另 ...
- 多种语言书写 “ HelloWorld ”
最基本的C: #include<stdio.h> int main(int argc, char const *argv[]) { printf("HelloWorld\n&qu ...
- 【解题报告】AtCoder ABC115 (附英文题目)
------------------------------迟到的AK---------------------------------- A - Christmas Eve Eve Eve Time ...
- pycharm永久激活记录
由于上一年安装的pycharm激活时是用的激活码,有期限的,一直到今年5月4日过期,这两天顺便把版本也更新到最新,一直用的free版,到今天提醒我free快到期了,所以才狠下心来去找解决方案,目前已经 ...
- MySQL - UNION 和 UNION ALL 操作符
UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每条 SE ...
- forEach 以及 IE兼容
语法 array.forEach(function(currentValue, index, arr), thisValue) 参数 参数 描述 function(currentValue, in ...
- python简单试题4
( ps : 题目中用到的一些random函数在最后末尾处有介绍) 1,在屏幕上显示跑马灯文字 import os # 调用os模块 import time # 调用时间模块 def main(): ...
- web开发框架Flask学习二
jinja2模板规范 在当前项目中创建一个文件为templates的文件夹,将其设置为模板文件夹,新建的html为模板页面, 在视图函数中使用render_template(".html的文 ...
- linux的发展过程
1. 操作系统 人与计算机硬件直接的中介 2. Linux系统组成 3. Linux的发展过程 蛋-人-人-人 unix于诞生贝尔实验室 人-谭教授 谭宁邦 minix mini unix. 主要用于 ...