完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
|
|
可不可以这样理解,例如你要接收或发送0x31这个数字,实际使用ASCII码,就是0x33,0x31两个字节
现在收到0x33和0x31之后,你想把它变成31赋值给你的变量 或者你想把0x31发送出去,转换成0x33,0x31 如果是这样,还算简单: 发送可以这样写 char data = 0x31; char send_ch[2] = {0} ; unsigned char temp = 0; temp = data & 0x0f if( temp <= 9 ) //0~9的数字 { send_ch[0] = temp + 0x30; } else //a~f的数字转换为ASCII码的字母 { send_ch[0] = temp + 0x51; } temp = (data >> 4) & 0x0f if( temp <= 9 ) //0~9的数字 { send_ch[1] = temp + 0x30; //数字0的ASCII码值是0x30,相差0x30,1~9同理 } else //a~f的数字转换为ASCII码的字母 { send_ch[1] = temp + 0x51; //字母a的值是0x61,数字a与其相差0x51,b、c、d、e、f同理 } SendData( send_ch); //发送出去 接收反过来操作就可以了,例如收到0x33,和0x31 unsigned char rx_data[2] = {0x33, 0x31}; //接收过程我这里就用赋值替代 char data = 0; unsigned char temp; if( ( rx_data[0] >= '0' ) && ( rx_data[0] <= '9' ) ) //低位是数字 { temp = rx_data[0] - 0x30; } else if( ( rx_data[0] >= 'a' ) && ( rx_data[0] <= 'f' ) ) //低位是字母转换到a~f { temp = rx_data[0] - 0x51; } data |= temp; if( ( rx_data[1] >= '0' ) && ( rx_data[1] <= '9' ) ) //低位是数字 { temp = rx_data[0] - 0x30; } else if( ( rx_data[1] >= 'a' ) && ( rx_data[1] <= 'f' ) ) { temp = rx_data[0] - 0x51; } data |= (temp << 4); 我写的大概意思,你可以把这些变成一个或两个函数,需要转换的时候调用就可以了 |
|
|
|
对对是十进制,不好意思 没说明白,我已经搞定了,我直接用强制转换就能得到十进制的数了,谢谢了 |
|
|
|
|
|
|
|
怎么个强制转换法? |
|
|
|
0x10 十六进制转换成十进制就是16 直接用 int temp = (int)0x10;//temp就等于16了。 就可以了。 |
|
|
|
好的 谢谢了啊 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-spi编程示例之spi编写程序
575 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第三十七章 image图像对比实验
554 浏览 0 评论
500 浏览 1 评论
482 浏览 0 评论
关于RT-Thread studio添加freemodbus控件失败的问题
817 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11641 浏览 31 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-8 13:33 , Processed in 0.568975 second(s), Total 50, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号