加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Arduino:将十六进制字符串转换为uint64或十进制字符串

发布时间:2020-12-14 05:45:44 所属栏目:Windows 来源:网络整理
导读:我想使用uint64变量将十六进制字符串(如“43a2be2a42380”)转换为十进制表示形式.我需要这个,因为我正在实现一个充当键盘的RFID阅读器,按键必须是十进制数字. 我已经看到了其他答案(convert HEX string to Decimal in arduino)并使用strtoul实现了一个解决方
我想使用uint64变量将十六进制字符串(如“43a2be2a42380”)转换为十进制表示形式.我需要这个,因为我正在实现一个充当键盘的RFID阅读器,按键必须是十进制数字.

我已经看到了其他答案(convert HEX string to Decimal in arduino)并使用strtoul实现了一个解决方案,但它只适用于32位整数,并且strtoull不可用.

uint64_t res = 0;
String datatosend = String("43a2be2a42380");
char charBuf[datatosend.length() + 1];
datatosend.toCharArray(charBuf,datatosend.length() + 1) ;
res = strtoul(charBuf,NULL,16);

如何使用Arduino获取大十六进制字符串/字节数组的十进制数?

解决方法

你可以自己实现:

#include <stdio.h>
#include <stdint.h>
#include <ctype.h>

uint64_t getUInt64fromHex(char const *str)
{
    uint64_t accumulator = 0;
    for (size_t i = 0 ; isxdigit((unsigned char)str[i]) ; ++i)
    {
        char c = str[i];
        accumulator *= 16;
        if (isdigit(c)) /* '0' .. '9'*/
            accumulator += c - '0';
        else if (isupper(c)) /* 'A' .. 'F'*/
            accumulator += c - 'A' + 10;
        else /* 'a' .. 'f'*/
            accumulator += c - 'a' + 10;

    }

    return accumulator;
}

int main(void)
{
    printf("%llun",(long long unsigned)getUInt64fromHex("43a2be2a42380"));
    return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读