C++开发中BYTE类型数组转为对应的字符串
下午密码键盘返回了一个校验码,是BYTE类型数组,给上层应用返回最好是字符串方式,怎样原样的将BYTE数组转为string串呢?不多说,开动脑筋上手干!!!
BYTE格式的数组bt{08,D7,B4,FB},如何转换为字符串样式 (str = "08 D7 B4 FB") 呢?
其实在BYTE数组中存放的值是bt{8,215,180,251}这样,下面开始转字符串。
1、先对数组元素进行除数为16的取余和取模(这样215就会变成13和7,是不是看到16进制的值了呀)
商v 模m
取bt[0],bt[0]/16=0,bt[0]%16=8
取bt[1],bt[1]/16=13,bt[0]%16=7
取bt[2],bt[2]/16=11,bt[0]%16=4
取bt[3],bt[3]/16=15,bt[0]%16=11
2、数值转ASCII
16进制的第一位
判断v>=0&&v<=9,则v+=48 //数字转换
else v>=97&&v<=122 则v+87 //小写字母转换
else v+55 //大写字母转换
16进制第二位
判断m>=0&&m<=9,则m+=48 //数字转换
else m>=97&&m<=122 则m+87 //小写字母转换
else m+55 //大写字母转换
3、将对应的char(v)+char(m)合并为一个字符串即可
代码
1、循环执行取余和取模
int v = (*(lpxKVC->lpbData+i))/16;
int m = (*(lpxKVC->lpbData+i))%(16);
执行完成
v=0,m=8
v=13,m=7
v=11,m=4
v=15,m=11
2、将得到的v和m转换为对应的ASCII码
if(v>=0&&v<=9) {v+=48;}
else if( v>=97&&v<=122) {v=v+87;}
else {v=v+55;}
if(m>=0&&m<=9) {m+=48;}
else if( m>=97&&m<=122) {m=m+87;}
else {m=m+55;}
执行完成
v=48,m=56
v=68,m=55
v=66,m=52
v=70,m=66
3、循环ASCII类型转换为char
char vChar = (char)v; //ASCII转字符
char mChar = (char)m;
执行完成
vChar=0,mChar=8
Char=D,mChar=7
vChar=B,mChar=4
vChar=F,mChar=B
4、将字符合并为字符串
char strKVCTmp[3]={vChar,mChar};
strKVC += strcat(strKVCTmp," ");
执行完成
08 D7 B4 FB
完整代码:
CString strKVC="";
for(int i=0;i<lpxCryptData->usLength;i++)
{
int v = (*(lpxCryptData->lpbData+i))/16; //取除数(前面一位)
int m = (*(lpxCryptData->lpbData+i))%(16); //取模(后面一位)
//前面一位转char
if(v>=0&&v<=9) {v+=48;} //数字转ASCII
else if( v>=97&&v<=122) {v=v+87;} //小写字母转ASCII
else {v=v+55;} //大写字母转ASCII
char vChar = (char)v; //ASCII码转为char类型
//后面一位转char
if(m>=0&&m<=9) {m+=48;}
else if( m>=97&&m<=122) {m=m+87;}
else {m=m+55;}
char mChar = (char)m;
//两位char合并为一个字符串
char strKVCTmp[3]={vChar,mChar}; //char字符合并成string
strKVC += strcat(strKVCTmp," ");
}
C++开发中BYTE类型数组转为对应的字符串的更多相关文章
- JSon_零基础_001_将布尔类型数组转换为JSon格式字符串,返回给界面
将布尔类型数组转换为JSon格式字符串,返回给界面 需要导入包: 编写bean: package com.west.webcourse.po; /** * 第01步:编写bean类, * 下一步com ...
- java中的lis数组转为json数据
第一个想到的办法就是 javascript中的replace 也就是先将list数组转为 字符串再对 字符串 replace 但是万万没想到javascript的replace函数在替换数据时, 默 ...
- Java 中 byte 类型初始化问题
很早的时候由于工作需要,接触过一点 Java,于是有了这个坑,今天回头看到自己在 Stackoverflow 上提的问题发现了它,于是再记录下. 在使用中,需要将 byte 类型的的每一位都置 1.我 ...
- 关于JAVA中Byte类型的取值范围的推论(*零为正数,-128在计算机中的表示方法...)
先看一段推理<*一切都是在8个比特位的前提下,讨论二进制的符号位,溢出等等,才有意义*> +124:0111 1100 -124:1000 0100 +125:0111 1101 -125 ...
- Agile PLM 开发中AgileAPI类型对应控制台分类说明
1) 分类中的一级大类PLM后台管理的控制台中,每个分类中的一级大类都对应AgileAPI中一个类型 IServiceRequest对应产品服务请求,表为:psrIPrice对应价格,表为:pr ...
- C#中byte类型运算
首先看下面一段代码 byte x = 1; byte y = 2; byte z = x + y; Console.WriteLine(z); 可能很多人会说显示结果是3. 其实,这段代码无法运行,因 ...
- Java中Byte类型数据在运算中的问题
比如: byte a=1; byte b=2; byte c; c=a+b; //这样是计算不出c,是错误的 c=a+1; //这样也是不能计算c的 c=64+1; //为什么这样就能计算c,在Jav ...
- C#中byte[]类型转换为其它类型
我们这里就举byte[]类型和long类型的转换,其它数据类型用BitConverter类以此类推: /// <summary> /// 字节数组转换为long类型 /// </su ...
- ArcEngine开发中“错误类型"****"未定义构造函数”
from:http://blog.csdn.net/mengdong_zy/article/details/8990593 问题 在ArcEngine开发的时候,在编译时,发现出现这样的错误,出错的地 ...
随机推荐
- Ubuntu 16.04 LTS今日发布
Ubuntu 16.04 LTS今日发布 Ubuntu16.04 LTS 发布日期已正式确定为 2016 年 4 月 21 日,代号为 Xenial Xerus.Ubuntu16.04 将是非常受欢迎 ...
- 海量数据挖掘MMDS week3:社交网络之社区检测:基本技巧
http://blog.csdn.net/pipisorry/article/details/49052057 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...
- Java模式之模板方法模式
当我们遇到的业务逻辑具有大致相同的方式的时候,我们也许就该将这个业务逻辑抽象出来,采用模板方法,来进行封装我们的代码,提高代码的重用性,以及可维护性.下面是我的一个复习用的案例: 第一步:我们需要一个 ...
- Java进阶(七)Java加密技术之非对称加密算法RSA
Java加密技术(四)--非对称加密算法RSA 非对称加密算法--RSA 基本概念 非对称加密算法是一种密钥的保密方法. 非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(priv ...
- mpi中程序在集群中的分发
我们在开发mpi程序时,由于其是分布式程序,我们在单个节点上完成编码后,需要将代码拷贝到整个集群进行测试.集群之间的文件拷贝可以通过scp命令完成.但是scp命令是针对两个节点之间文件互传设计,为了将 ...
- Linux学习笔记 --iptables防火墙配置
iptables防火墙配置 一.防火墙简介 1.功能: 1)通过源端口,源IP地址,源MAC地址,包中特定标记和目标端口,IP,MAC来确定数据包是否可以通过防火墙 2)分割内网和外网[附带的路由器的 ...
- Android调用binder实现权限提升-android学习之旅(81)
当进程A权限较低,而B权限较高时,容易产生提权漏洞 fuzz测试的测试路径 First level Interface是服务 Second level Interface是服务中对应的接口 1.首先获 ...
- android 屏幕适配,hdpi,xhdpi,xxhdpi理解,常见出图
屏幕适配 首先理解下各个尺寸单位代表的意思 尺寸含义 px: 像素 dip: Density-independent pixel 独立像素密度 dpi: dot per inch 分辨率 ppi: p ...
- 一张图看懂AR至GL数据流
- HBase Master 启动
–>首先初始化HMaster –>创建一个rpcServer,其中并启动 –>启动一个Listener线程,功能是监听client的请求,将请求放入nio请求队列,逻辑如下: –&g ...