【C语言&单片机杂谈】:char数组转换成HEX格式数据、C语言中什么情况下可以多赋值、 C语言中Switch中的 break和return的区别?C语言中类型转换?


前言

        随着单片机的学习哈,逐渐的大家会经常碰到HEX格式传送数据,类似于ABC123这种数据并不能直接字符串传送过去,只能根据数据位发送  即就是  0x41(A),0x42(B),0x43(C),0x31(1),0x32(2),0x33(3)。

效果如下链接工具:

        HEX转字符 十六进制转字符 hex gb2312 gbk utf8 汉字内码转换 - The X 在线工具 (the-x.cn)

当然在单片机内部,以及我们C语言编程的时候必然是需要编写函数来解决此类问题。

补充三个小知识点(各位看官就随眼一过即可):

                C语言中绝对不可以连续赋值!!!           

//可以定义的方式
int a,b,c;
a=1;
b=1;
c=1;
或
int a=1;int b=1;int c=1;

int a,b,c;
a=b=c=1;
或
int b,c;
int a=b=c=1;

//不可以定义的方式
int a=b=c=1;

                C语言中  Switch中的  break和return的区别?

        break是直接退出switch语句,如果循环里面有switch语句,这时候break语句只是跳出switch语句,作用不到循环体,return是退出该函数,也就是switch语句后面的语句也不执行了。

        在函数中,break用于结束一个循环,即跳出循环体,执行循环体之后的代码。但是只能结束最里面的循环。return也不是专门用于结束循环,return的功能是结束一个方法并且返回一个函数值,当一个方法遇到return语句时,这个方法将被结束。方法结束 ,执行权回到方法调用处。

                C语言中  类型转换?

int to char:

int a = 1;

a = a + '0';

printf("%c",a);

char to int:

char a = 1;

a = a - '0';

printf("%d",a);

string to 数字:

atoi   ——   转为int

atol   ——   转为long

atof   ——   转为double

数字 to string

sprintf    ——    转为数字

char s[5];
int a=11111;
sprintf(s,"%d",a);


一、String 转 HEX

const char hex[] = {
'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
void to_hex(char *s, int l, char *d)
{
    while(l--)
    {
        *(d+2*l+1) = hex[(*(s+l))&0x0f];
        *(d+2*l) = hex[(*(s+l))>>4];
    }
}

二、HEX 转 String

void to_str(char *s, int l, char *d)
{
    while(l--)
    {
        char* p1 = s+l;
        char* p2 = p1-1;
        *(d+l/2) =
        ( (*p1>'9'? *p1+9 : *p1) & 0x0f ) |
        ( (*p2>'9'? *p2+9 : *p2) << 4 );
        l--;
    }
}

三、综合测试案例

#include <stdio.h>

//查表法
const char hex[] = {
'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
void to_hex(char *s, int l, char *d)
{
    while(l--)
    {
        *(d+2*l+1) = hex[(*(s+l))&0x0f];
        *(d+2*l) = hex[(*(s+l))>>4];
    }
}
void to_str(char *s, int l, char *d)
{
    while(l--)
    {
        char* p1 = s+l;
        char* p2 = p1-1;
        *(d+l/2) =
        ( (*p1>'9'? *p1+9 : *p1) & 0x0f ) |
        ( (*p2>'9'? *p2+9 : *p2) << 4 );
        l--;
    }
}

	
int main () {
    char s[]= "ABC123",d[9],f[9];
    int i;
    d[8] = '\0';
    to_hex(s,sizeof(s)-1,d);//末尾是'\0' 
    to_str(d,2*sizeof(d),f);//字符占2位 
    printf("原始字符串:%s\n",s);
	printf("字符串转换为HEX:%s\n",d);
	printf("HEX转换为字符串:%s\n",f);
    return 0;
}

测试结果:

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值