C语言的字符串操作并不像java,Csharp那样提供直接的方法,简单粗暴。所以,在转换的时候往往费力费时,近日做项目正好用到和java程序通讯,java发送过来的数据是十六进制数字组成的字符串,解析的时候颇费心思才算完成,所以,权在此做一笔记,方便以后查看,以及需要帮助的童鞋,当然,有问题欢迎随时交流,一同进步,欧耶!~

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

读取数组中的数字,打印成字符串的时候以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;
}
 
————————————————
版权声明:本文为CSDN博主「青椒*^_^*凤爪爪」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhemingbuhao/article/details/83111564

C语言中16进制转字符串字符串转16进制相关推荐

  1. c语言中O空字符,OC语言中字符串的使用

    可变字符串 //插入字符串 NSMutableString*string1 =[NSMutableStringstringWithString:@"字符串"]; [string1i ...

  2. c语言 字符串数组末尾,C语言中,利用宏定义一个字符串和字符数组定义的字符串其末尾都会自动添加\0字符...

    利用宏定义一个字符串#define MYPHONE "AT+CMGS" 字符数组的方式来定义一个字符串unsigned char SMS[]="HELLO, WELCOM ...

  3. C语言中fun的功能是将字符串,下列给定的程序中,fun()函数的功能是:将p所指字符串中......

    下列给定的程序中,fun()函数的功能是:将p所指字符串中每个单词的最后一个字母改成大写(这里的"单词"是指有空格隔开的字符串).例如,若输入: I am a student to ...

  4. c++ scanf输入字符串_在C语言中,你真的搞清楚字符串了吗?

    1.C语言中没有字符串这种数据类型,可以通过char的数组来替代: 2.字符串一定是一个char的数组,但char的数组未必是字符串: 3.数字0(和字符'\0'等价)结尾的char数组就是一个字符串 ...

  5. C语言中fun的功能是将字符串,c语言程序设计请编写一个函数fun,它的功能是:将ss所指字符串中所.,c语言程序设计题 请编写一个函数fun,它的功能是:将ss所...

    计算机二级C语言上机南开100题--1 1: 第1题 m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人作为函数值返回,将低于平均分的分数放在below所指定的函数中. ...

  6. linux strcpy 用法,由Linux中管道的buffer,浅谈C语言中char类型字符串拷贝使用strcpy()和=赋值符号的区别...

    今天在写父子进程用两个单向管道通信时,出现了错误: Segmentation fault (core dumped) 打开core文件发现: 附上源码: 1 #include 2 #include 3 ...

  7. c语言中管道符作用,由Linux中管道的buffer,浅谈C语言中char类型字符串拷贝使用strcpy()和=赋值符号的区别...

    今天在写父子进程用两个单向管道通信时,出现了错误: Segmentation fault (core dumped) 打开core文件发现: 附上源码: 1 #include 2 #include 3 ...

  8. C语言 z的意思,C语言中z= x是什么意思

    x>=y>=z c语言 z>=y>=x;的意思是先求z>=y的值也就是4>=4;这个结果是真,也就是1然后求1>=x也就是1>=3,结果是假.就是0只要 ...

  9. c语言中int什么意思以及什么是无符号和有符号整型

    int 是整数类型,用于定义变量的类型,有符号,unsigned int 是无符号的整数类型,直白点说有符号无符号整型就是能不能存放负数. 根据程序编译器的不同,整形定义的字节数不同.51类单片机的C ...

  10. c语言中ff用16进制怎么表示什么,0xff(十六进制0xff表示什么)

    0xff 从数值上看,0xff表示一个十六进制数FF,也就是十进制的255.从电平高低来看,比如读取P1口得到0xFF,表示P1口8个引脚都是高电平. 以0x开始的数据表示16进制,0xff换成十进制 ...

最新文章

  1. Android WebView与ViewPager的滑动冲突分析
  2. python简介怎么写-python怎么写函数
  3. 浅析Faiss在推荐系统中的应用及原理
  4. 【数据库系统概论】考研第一部分重点分析【1.1】
  5. wxWidgets:wxProcessEvent类用法
  6. 对PostgreSQL的 ctid 的初步认识
  7. go IDE 编译环境设置win32和win64
  8. C#.NET中的事件2
  9. HTML5/CSS3基础
  10. 快速上手Tomcat(eclipse中配置tomcat)
  11. Observe rainy world
  12. Centos7 Zabbix3.2安装(yum)
  13. 唯一分解求正约数个数
  14. Pandas库基础知识(一)
  15. 订单量排行 php,订单量增速最快B2C电商未来电子商务的趋势网站
  16. 敏捷开发系列学习总结(18)——Scrum Master的情景领导力模型
  17. 基于CCS工程MSP430串口升级(三)
  18. 关于全球时间的一点理解
  19. Python3.6+Twisted+Scrapy安装
  20. Playfair Crack

热门文章

  1. 时间管理——番茄工作法
  2. Git 下载与安装教程
  3. Tableau:仪表板操作
  4. 关于APP接口设计 注意事项
  5. 快手用户群体分析_快手发布《2020快手用户及营销报告》
  6. Oracle 使用 PL/SQL Developer 生成 AWR 报告
  7. grads插值_GrADS使用简介
  8. Axure8.1破解码 注册码 授权码
  9. ESP32-S3 USB UART 下载总结
  10. JavaScript入门基础