第一种情况:

BYTE[0]=Ox12 BYTE[1]=0x34 BYTE[2]=0x56

最后要转换成字符串123456

另外一种情况:

BYTE[0]=Ox12 BYTE[1]=0x34 BYTE[2]=0x50

最后要转换成字符串12345

#include <iostream>

using std::cout;

using std::endl;

typedef char BYTE;

BCDconvert(res_arr, c2_arr, sizeof(c2_arr));

BCDconvert(res_arr, c2_arr, sizeof(c2_arr));

BCDconvert(res_arr, c3_arr, sizeof(c3_arr));

BYTE* BCDconvert(BYTE *cr, BYTE *cl, int cl_len) {

BYTE *cl_end = cl + cl_len;

BYTE *cr_begin = cr;

if (cl_len == 0) return NULL;

for (; cl<cl_end; ++cl) {

*cr++ = 0x30 | ((*cl & 0xF0) >> 4);

*cr++ = 0x30 | *cl & 0x0F;

}

// cr[-1] == 0x30 ? cr[-1] = 0 : cr[0] = 0;

/**/

while (cr > cr_begin && *--cr == 0x30) NULL;

if (cr != cr_begin)

cr[1] = 0;

else return NULL;

/**/

return cr;

}

int main(int argc, char *argv[]) {

BYTE c1_arr[] = {0x12, 0x34, 0x56};

BYTE c2_arr[] = {0x12, 0x34, 0x50};

BYTE c3_arr[] = {0x00, 0x00, 0x00};

BYTE res_arr[32];

if (BCDconvert(res_arr, c1_arr, sizeof(c1_arr)) != NULL)

cout << res_arr << endl;

if (BCDconvert(res_arr, c2_arr, sizeof(c2_arr)) != NULL)

cout << res_arr << endl;

if (BCDconvert(res_arr, c3_arr, sizeof(c3_arr)) != NULL)

cout << res_arr << endl;

return 0;

}

假设是仅仅删除最后一个0,将

cr[-1] == 0x30 ? cr[-1] = 0 : cr[0] = 0;

取消凝视,

另凝视:

/**/

while (cr > cr_begin && *--cr == 0x30) NULL;

if (cr != cr_begin)

cr[1] = 0;

else return NULL;

/**/

将第一个/**/改动为/** /就可以凝视掉!

使用时需先检測返回时,假设返回值不为NULL,即转换正确,假设返回NULL,表示传入的BYTE[]有误,或者全为0(此仅在使用while时才有可能出现).

C++ BYTE数组转字符串的更多相关文章

  1. php byte数组与字符串转换类

    <?php /** * byte数组与字符串转化类 * @author ZT */ class Bytes { /** * 转换一个string字符串为byte数组 * @param $str ...

  2. Byte数组和字符串相互转换的问题

    第一:需求:将文件转成byte数组,之后转成字符串返回.过滤器接收到响应内容后,需要将响应的内容转成byte数组. 第二:我刚开始的做法: Controller:byteArr = Conversio ...

  3. VB Byte数组转字符串问题

    在c#中,byte转换为字符串的过程中,如果byte的值为0,则转换成字符串时变为’\0’字符,’\0’字符在C#中意味着字符串结束,如果后面再有字符,则读取字符串的程序也不能读取和显示出来. 但是在 ...

  4. byte[] 数组和字符串的转换,与byte[] 数组和int类型的之间的转化

    我们先来看看byte bool  int ushort  等的定义 首先时byte[]数组与string之间的转换 string 转换位byte[] 数组 string str = "1-1 ...

  5. 你的环境有问题吧?--byte数组转字符串的疑惑

    1. 故事背景 小T是个测试MM,小C是个程序猿,今天早上他们又为一个bug吵架了. 小T:“这个显示是bug,在我的浏览器上显示不正确” 小C:“这个bug我不认,在我的电脑上显示正常,是你的环境有 ...

  6. c++中byte数组与字符串的转化

    我们不讨论与字符集有关的内容,只讨论在字节流传递过程中的问题. 我们在做一系统操作时会需要使用到数据流,比如接收网络数据,文件数据,图片数据,原始数据大多是以byte数组的形式提供,与其它语言(c#, ...

  7. 字符串与byte数组转换

    string weclome=""; byte[] data = new byte[1024]; //字符串转byte数组 data = Encoding.ASCII.GetByt ...

  8. 十六进制字符串转化为byte数组

    工作上有这样的需求之前找了好多都不行,好不容易有个可以的赶紧留下来. 原址:http://blog.163.com/roadwalker@126/blog/static/113561841201013 ...

  9. 字符串、十六进制、byte数组互转

    import java.io.ByteArrayOutputStream; public class HexUtil { /** * @param args */ public static void ...

随机推荐

  1. Windows共享上网的详细设置

    作者:朱金灿 来源:http://blog.csdn.net/clever101 在Windows环境下在A和B在同一个局域网上,A机子可以上网,B机子可以通过A机子可以通过设置的网络共享来上网.其中 ...

  2. AtCoderACGC001C Shorten Diameter

    Description: 给定一个\(n\)个点的树,要求删去最少的点使树的致直径不超过k Solution: 如果\(k\)为偶数,对于最终状态一定是以每一个点为根任何点的深度不能超过\(k/2\) ...

  3. sleep---暂停指定的时间

    sleep命令可以用来将目前动作延迟一段时间. 使用权限:所有使用者. 语法 sleep [--help] [--version] number[smhd] 参数说明: --help : 显示辅助讯息 ...

  4. 谈一谈Nginx的强大

    什么是Nginx? Nginx是一款高性能,开源的,支持高并发而轻量级的Web服务器,同时也是具有反向代理服务器及电子邮件(IMAP/POP3)的代理服务器. 基于REST架构风格,并且以统一资源描述 ...

  5. 继承AbstractRoutingDataSource再通过AOP实现动态数据源切换(转)

    关于AbstractRoutingDataSource我在研究开源中国的开源项目时候才发现,好奇的看了一下代码发现自己看不明白,大概就看懂了Spring AOP切面这里,根据注释作者的意思是通过这个可 ...

  6. VMware虚拟机XP系统安装

    转载:http://jingyan.baidu.com/article/54b6b9c00e2f452d593b4762.html

  7. 【直接拿来用のandroid公共代码模块解析与分享】の Notification和NotificationManager

    本文源代码托管在https://github.com/ASCE1885/asce-common,欢迎fork Android项目做得多了.会发现原来非常多基础的东西都是能够复用,这个系列介绍一些自己项 ...

  8. Flume的Events

    Flume NG传输的数据的基本单位是event,如果是文本文件,通常是一行记录,这也是事务的基本单位.

  9. 【例题 8-4 UVA - 11134】Fabled Rooks

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 显然把问题分解成两个子问题. x轴和y轴分别做. 即n个点要求第i个点在[li,ri]范围内.(ri<=n) 问是否可行. 按 ...

  10. 【Good Bye 2017 B】 New Year and Buggy Bot

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举一下全排列.看看有多少种可以到达终点即可. [代码] #include <bits/stdc++.h> using ...