在arduino平台上将字符串转换为十六进制

问题描述 投票:0回答:2

我正在做一个小型解析器,应该将字符串转换为十六进制值,我使用arduino作为平台,但我正在使用它进行堆栈。

我的绳子是

data = "5449"
其中每个元素都是一个字符,所以我想将其转换为十六进制值,如
dataHex = 0x54 0x59
,最后这些值应转换为 ASCII 为
dataAscii= TI

我该怎么做?

我正在考虑用

dataCharArray = 54 49
将其拆分为一个字符数组,然后将这些值转换为字符 T 和 I,但我不确定这是否是最好的方法。

提前致谢,

问候!

arduino arduino-ide
2个回答
3
投票

我的电脑上目前还没有安装arduino,所以我们希望以下功能能够正常工作:

char nibble2c(char c)
{
   if ((c>='0') && (c<='9'))
      return c-'0' ;
   if ((c>='A') && (c<='F'))
      return c+10-'A' ;
   if ((c>='a') && (c<='a'))
      return c+10-'a' ;
   return -1 ;
}

char hex2c(char c1, char c2)
{
   if(nibble2c(c2) >= 0)
     return nibble2c(c1)*16+nibble2c(c2) ;
   return nibble2c(c1) ;
}

String hex2str(char *data)
{
   String result = "" ;
   for (int i=0 ; nibble2c(data[i])>=0 ; i++)
   {
      result += hex2c(data[i],data[i+1]) ;
      if(nibble2c(data[i+1])>=0)
        i++ ;
   }
   return result;
}

0
投票

修正功能:

char nibble2c(char c)
{
   if ((c>='0') && (c<='9'))
      return c-'0' ;
   if ((c>='A') && (c<='F'))
      return c+10-'A' ;
   if ((c>='a') && (c<='f')) // (c<='f') NOT (c<='a')
      return c+10-'a' ;
   return -1 ;
}
© www.soinside.com 2019 - 2024. All rights reserved.