查看: 612|回复: 6

[其他] 16进制转10进制库,自写库。

[复制链接]
  • TA的每日心情
    擦汗
    2020-9-16 19:21
  • 签到天数: 56 天

    [LV.5]常住居民I

    发表于 2020-3-13 11:03 | 显示全部楼层 |阅读模式
    本帖最后由 Leslie1995 于 2020-9-9 16:49 编辑

    前言:

    最开始是想用上位机输入三个数值控制RGB全彩led灯,输出各种颜色。然后直接输入数值也可以但是但是需要区分数值大小,毕竟麻烦。想到可以用16进制来当输入。但是16二进制似乎不能直接利用输出,需要转为10二进制,但是转一圈发现没有直接转换的库,或者都比较麻烦的方法,所以尝试自己写一个库。自己写的。不一定没有bug。 。如果有问题,可以帮忙忙提出来一下。
         功能:
           串行输入字符串(16二进制),字符串输入字符串(10二进制),自动补0,分隔符(炭)也可以保留,或不保留。

    例程。 :

    1.串行输入:

    1. [mw_shl_code=arduino,true]
    2. /*
    3.     @name             Hex to decimal
    4.     @description      Hex to decimal
    5.     @version          1.4
    6.     @date             2020/3/13
    7.     @Author           chemoontheshy
    8. */
    9. #include"Hex2dec.h"
    10. Hex2dec hex2dec;
    11. void setup() {
    12.   // put your setup code here, to run once:
    13.   Serial.begin(115200);//serial baud rate
    14. }

    15. void loop() {
    16.   // put your main code here, to run repeatedly:

    17.   if (Serial.available() > 0)//received data
    18.   {
    19.     String data;
    20.     while (Serial.available() > 0) {
    21.       data = data + char(Serial.read());
    22.       delay(2);
    23.     }
    24.     Serial.println("data:" + data);
    25.     String hex = data;
    26.     String dec;
    27.     /*
    28.       (String hex,char ' ')
    29.       参数1,输入的需要转换的16进制(String)
    30.       参数2,输入分隔符,默认‘ ’(默认空格,)NUll也可以,但是会报警告。(char)
    31.     */
    32.     dec = hex2dec.getsDec(hex, ',');
    33.     //    long dec = todec(hex);
    34.     Serial.print("dec: ");
    35.     Serial.println(dec);
    36.     Serial.print("hex: ");
    37.     Serial.println(hex);
    38.   }
    39. }[/mw_shl_code]
    复制代码



    结果:
    X@15]W1@%I{L1BL%BN}W6{7.png
    需要更改参数2位','
    `4(_AZ0HA6N8{~AKYRC1U7N.png


    2.例程二

    1. /*
    2.     @name             Hex2dec
    3.     @description      Hex to decimal
    4.     @version          1.0
    5.     @date             2020/3/13
    6.     @Author           chemoontheshy
    7. */
    8. #include"Hex2dec.h"
    9. Hex2dec hex2dec;
    10. void setup() {
    11.   Serial.begin(115200);//serial baud rate
    12.   // put your setup code here, to run once:
    13.   String hex1 = "#F10423";
    14.   String hex2 = "D1 03 68";
    15.   String hex3 = "D1,03,8";
    16.   String dec1;
    17.   String dec2;
    18.   String dec3;
    19.   dec1 = hex2dec.getsDec(hex1, '#');
    20.   dec2 = hex2dec.getsDec(hex2, ' ');
    21.   dec3 = hex2dec.getsDec(hex3, ',');
    22.   //    long dec = todec(hex);
    23.    Serial.print("hex1: ");
    24.   Serial.println(hex1);
    25.   Serial.print("dec1: ");
    26.   Serial.println(dec1);
    27.   Serial.print("hex2: ");
    28.   Serial.println(hex2);
    29.   Serial.print("dec2: ");
    30.   Serial.println(dec2);
    31.   Serial.print("hex3: ");
    32.   Serial.println(hex3);
    33.   Serial.print("dec3: ");
    34.   Serial.println(dec3);


    35. }

    36. void loop() {
    37.   // put your main code here, to run repeatedly:

    38. }
    复制代码




    结果:
    Q@72]DZL(_7LS`@][9DT7@1.png








    Hex2dec.rar

    2.61 KB, 下载次数: 7

    该用户从未签到

    发表于 2020-9-6 01:33 | 显示全部楼层
    俺看了代码,谢谢。
    不过你从上位机输出到arduino中还是有一次转换 String 转 char[][16],对吧,求这段代码
  • TA的每日心情
    擦汗
    2020-9-16 19:21
  • 签到天数: 56 天

    [LV.5]常住居民I

     楼主| 发表于 2020-9-9 17:01 | 显示全部楼层
    seanpu 发表于 2020-9-6 01:33
    俺看了代码,谢谢。
    不过你从上位机输出到arduino中还是有一次转换 String 转 char[][16],对吧,求这段代码 ...

    一段时间没碰了,不太懂,你需要是怎样转?String 转char, 好像有自带函数吧,或者这样
    1. String str = "aeds";
    2. char a[10];
    3. void setup() {
    4.   // put your setup code here, to run once:
    5. Serial.begin(115200);//串口调试波特率
    6. for(int i=0;i<4;i++){
    7.   a[i]=str[i];
    8.    Serial.println(a[i]);
    9. }
    10. Serial.print("a[2]:");
    11. Serial.println(a[2]);
    12. }

    13. void loop() {
    14.   // put your main code here, to run repeatedly:
    15.   
    16. }
    复制代码

    该用户从未签到

    发表于 2020-9-10 21:29 | 显示全部楼层
    Leslie1995 发表于 2020-9-9 17:01
    一段时间没碰了,不太懂,你需要是怎样转?String 转char, 好像有自带函数吧,或者这样
    ...

    我最初是想偷懒,想看看是不是有这种方法之外的思路,因为我对于C和C++不熟悉。结果还是回到了这条路上,我之前已经完成了,谢谢
  • TA的每日心情
    郁闷
    2020-4-18 10:41
  • 签到天数: 69 天

    [LV.6]常住居民II

    发表于 2020-9-14 09:33 | 显示全部楼层
    Leslie1995 发表于 2020-9-9 17:01
    一段时间没碰了,不太懂,你需要是怎样转?String 转char, 好像有自带函数吧,或者这样
    ...

    这算法挺好,不过得已知STR的位数。用上length()适应性会更好!
    还有和自带的函数对比,那个效率会高一些呢?
    下面的笔记写得不错
    https://www.cnblogs.com/dapenson/p/12822519.html
  • TA的每日心情
    擦汗
    2020-9-16 19:21
  • 签到天数: 56 天

    [LV.5]常住居民I

     楼主| 发表于 2020-9-16 19:21 | 显示全部楼层
    完完全全 发表于 2020-9-14 09:33
    这算法挺好,不过得已知STR的位数。用上length()适应性会更好!
    还有和自带的函数对比,那个效率会高一些 ...

    看看,谢谢
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    新人小白求助
    新人小白求助
    代码 #define rLedPin 6 #define gLedPin 5 #define bLedPin 3 #define irSensor
    PIR和光线控制的小夜灯
    PIR和光线控制的小夜灯
    解答网友PIR和光线控制的小夜灯的提问, 1:光线暗和人走近RGB灯亮,或的逻辑关系。
    如何用Arduino Serial Monitor调节LED的亮度;
    如何用Arduino Serial Mon
    现有以上LED链接布局,代码如下: 基础的Blink代码; 要求: 以同样的线路布局,将
    新手求助 写一个可以接受五个单词的代码然后依次打印
    新手求助 写一个可以接受
    写一个草图代码,接收5个单词的输入,然后按升序打印出来 像图中所示一样 请问该怎么
    我小白,只有有想法,求一个实现方案
    我小白,只有有想法,求一
    不知道是不是应该发布到本板块,如有不妥请告知。 我有一把这样的锁头 工作原理
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表