//16进制转字符串

void HexToStr(char *pbDest, char *pbSrc, int nLen)
{
    unsigned char ddl,ddh;
    int i;

for (i=0; i<nLen; i++)
    {
        ddh = 48 + (unsigned char)pbSrc[i] / 16;
        ddl = 48 + (unsigned char)pbSrc[i] % 16;
        if (ddh > 57) ddh = ddh + 7;
        if (ddl > 57) ddl = ddl + 7;
        pbDest[i*2] = ddh;
        pbDest[i*2+1] = ddl;
    }

//pbDest[nLen*2] = '\0';
}

//字符串转16进制
void StrToHex(char *pbDest, char *pbSrc, int nLen)
{
    unsigned char h1,h2;
    unsigned char s1,s2;
    int i;

for (i=0; i<nLen; i++)
    {
        h1 = pbSrc[2*i];
        h2 = pbSrc[2*i+1];

s1 = toupper(h1) - 0x30;
        if (s1 > 9) 
            s1 -= 7;

s2 = toupper(h2) - 0x30;
        if (s2 > 9) 
            s2 -= 7;

pbDest[i] = s1*16 + s2;
    }
}

一、将数组转换为十六进制同值的字符串

读取数组中的数字,打印成字符串的时候以2位大写的格式。

int arrayToStr(unsigned char *buf, unsigned int buflen, char *out)
{
    char strBuf[33] = {0};
    char pbuf[32];
    int i;
    for(i = 0; i < buflen; i++)
    {
        sprintf(pbuf, "%02X", buf[i]);
        strncat(strBuf, pbuf, 2);
    }
    strncpy(out, strBuf, buflen * 2);
    printf("out = %s\n", out);
    return buflen * 2;
}
二、将十六进制的字符串转换为十六进制数组

下面定义的字符串中的字符只能是0-F的字符,但是不区分大小写的,前面是安装两位为一个数字进行转换,最后一个数字如果还是两位的则正常转换,如果只剩一位的话则在前面补零输出。

int StringToHex(char *str, unsigned char *out, unsigned int *outlen)
{
    char *p = str;
    char high = 0, low = 0;
    int tmplen = strlen(p), cnt = 0;
    tmplen = strlen(p);
    while(cnt < (tmplen / 2))
    {
        high = ((*p > '9') && ((*p <= 'F') || (*p <= 'f'))) ? *p - 48 - 7 : *p - 48;
        low = (*(++ p) > '9' && ((*p <= 'F') || (*p <= 'f'))) ? *(p) - 48 - 7 : *(p) - 48;
        out[cnt] = ((high & 0x0f) << 4 | (low & 0x0f));
        p ++;
        cnt ++;
    }
    if(tmplen % 2 != 0) out[cnt] = ((*p > '9') && ((*p <= 'F') || (*p <= 'f'))) ? *p - 48 - 7 : *p - 48;
    
    if(outlen != NULL) *outlen = tmplen / 2 + tmplen % 2;
    return tmplen / 2 + tmplen % 2;
}
三、将十进制字符串转化为十进制数组

int StringToCom(char *str, unsigned char *out, int *outlen)
{
    char *p = str;
    char high = 0, low = 0;
    int tmplen = strlen(p), cnt = 0;
    tmplen = strlen(p);
    if(tmplen % 2 != 0) return -1;
    while(cnt < tmplen / 2) //1213141516171819
    {
        out[cnt] = (*p - 0x30) * 10 + (*(++p) - 0x30);
        p++;
        cnt ++;
    }
    *outlen = tmplen / 2;
    return tmplen / 2;
}
四、简单的使用方法

定义的参数有些为unsigned char,是因为在定义为char的时候,转换为十六进制之后,负数在表示的时候,难看!

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
 
unsigned char ArrayCom[16] = {
    11, 12, 13, 14, 15, 16, 17, 18,
    19, 20, 21, 22, 23, 24, 25, 26};
unsigned char ArrayHex[16] = {
    0x2c, 0x57, 0x8f, 0x79, 0x27, 0xa9, 0x49, 0xd3,
    0xb5, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
 
char *strHex = "01aa0304050607083f0add0c0d0e0f00";
char *strCom = "1D1213AB6FC1718B19202122232425A6";
 
int main(int argc, const char *argv)
{
    int cnt;
    char str[33] = {0};
    unsigned char out[33];
    arrayToStr(ArrayCom, 16, str);
    
    int outlen = 0;
    StringToHex(strCom, out, &outlen);
    for(cnt = 0; cnt < outlen; cnt ++)
    {
        printf("%02X ", out[cnt]);
    } 
    putchar(10);
 
    return 0;
}

原文链接:https://blog.csdn.net/zhemingbuhao/article/details/83111564

16进制转字符串字符串转16进制相关推荐

  1. python使用matplotlib可视化、使用英文单次或者缩写指定使用的颜色、使用16进制的RGB字符串指定颜色、使用RGB或者RGBA数字元组指定颜色

    python使用matplotlib可视化.使用英文单次或者缩写指定使用的颜色.使用16进制的RGB字符串指定颜色.使用RGB或者RGBA数字元组指定颜色 目录

  2. 将字符串转换成16进制

    将字符串转换成16进制 原文:将字符串转换成16进制 1.将普通字符串转换成16进制的字符串. 点击进入推荐链接 class Program {static void Main(string[] ar ...

  3. 16进制字符串转化为10进制数

    同学在MSN CDC电话面试(可惜我在被面试的时候全然没有这么具体的问题了:))中的一个题目:将16进制的字符串转化为10进制数字,例如"1A",则对应26.题目很简单,实现起来也 ...

  4. 将字符串转为16进制数_C语言中的进制互转与数值和字符串互转的混搭玩法

    点击上方公众号名称关注,获得更多内容 ✎ 编 者 悟 语 很多事根本就没有那么多的前提可言,想做事,就不要把先决条件看得过重. 文 章 导 读 今天给小伙伴们介绍下了下进制转换和字符串与数值互转的方法 ...

  5. linux 串口 字符 间隔,嵌入式linux编程过成中模块从串口读数需要特定的字符段并且需要每两位字符数组元素转换成一个16进制数(提取特定字符串+字符串转16进制)...

    嵌入式linux编程过成中用到zigbee模块 zigbee从串口读数需要特定的字符段并且需要每两位字符数组元素转换成一个16进制数 (提取特定字符串+字符串转16进制) #include #incl ...

  6. C#中,将16进制转换为有符号的10进制的方法(支持带0x标志,支持任意字符串)

    /// <summary>         /// 将16进制转换为有符号的10进制         /// </summary>         /// <param ...

  7. c语言 乱码转化为16进制_C语言版的16进制与字符串互转函数

    http://www.cnblogs.com/nio-nio/p/3309367.html /* // C prototype : void StrToHex(BYTE *pbDest, BYTE * ...

  8. 16进制格式的字符串怎样转换为整数

    16进制格式的字符串怎样转换为整数 请教一个问题在使用一个第三方包的时候我在res/layout目录创建了一个跟该包下layout同名的布局文件结果显示的时候实现效果就被项目中新创建的布局样式所替代那 ...

  9. 嵌入式linux编程过成中模块从串口读数需要特定的字符段并且需要每两位字符数组元素转换成一个16进制数(提取特定字符串+字符串转16进制)

    嵌入式linux编程过成中用到zigbee模块 zigbee从串口读数需要特定的字符段并且需要每两位字符数组元素转换成一个16进制数 (提取特定字符串+字符串转16进制) #include<st ...

最新文章

  1. 会计电算化之Excel
  2. 我该建数仓、大数据平台还是数据中台?看完脑子终于清醒了
  3. 区别 (function($){...})(jQuery)、$(function(){ })和$.fn
  4. ubuntu下安装vmtool
  5. 在酷热的就业天气寻找几丝凉意
  6. YOLOv5 完美实现中文标签显示
  7. 520情人节告白❤HTML+CSS+JavaScript实现抖音流动爱心
  8. 苹果手机投影_手机、平板屏幕投到投影机上常见问题与答案
  9. 解决node环境下SyntaxError: Cannot use import statement outside a module的问题
  10. SystemUI原生信号塔替换为五格信号塔
  11. C语言中delay的用法
  12. oppo禁用android系统通知栏,OPPO全机型手机去除状态栏ROOT警告-安卓刷机教程
  13. c语言万年历大作业报告,C语言万年历设计报告
  14. 使用mobaxterm连接服务器出现连接中断问题
  15. Android 技术选型
  16. iBatis简单介绍
  17. 源码编译ncurses出错
  18. 腾讯大连无线事业部Java实习面经
  19. 暖通毕业设计总结系列1——设计手段
  20. 微信的野心到底有多可怕?多可怕!

热门文章

  1. 微软免费杀毒软件Morro即将发布
  2. 从科学的开放精神来看开源
  3. 潜艇的主动声呐探测信号
  4. 脑部CT检查图像检查床去除算法
  5. Git 本地分支与远程分支的关联
  6. 写给想考金融硕士的学弟学妹
  7. Q1 不同企业的竞争优势(待完成)
  8. Uniswap V2里的手续费换算
  9. ui设计师与android,总算知道ui设计师适配的知识点
  10. 股份有限公司的章程包括哪些内容?