微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将消息的值从十六进制转换为十进制?

如何解决如何将消息的值从十六进制转换为十进制?

我需要编写一个函数,将我在 CAN 总线上收到的消息的消息字节 (this.byte(2)) 从十六进制转换为十进制。 例如,我在 CAN 总线上有以下消息“F1 02 1A 13 00 00 00 00”然后该函数应该返回值 26 for this.byte(2) “1A”。

我遵循了在互联网上找到的一些示例,但仍然没有得到正确的值。 那么我的函数有什么问题?

variables
{
  char hexa[2];
  long decimal,place;
  int val,len;
}

int HexToDec(char hexa[])
{   
  decimal = 0;
  i=0;
  place = 1;

  len = strlen(hexa);
  len--;

  for(i=0; hexa[i]!='\0'; i++)
  {
 
      if(hexa[i]>='0' && hexa[i]<='9')
      {
          val = hexa[i] - 48;
      }
      else if(hexa[i]>='a' && hexa[i]<='f')
      {
          val = hexa[i] - 97 + 10;
      }
        else if(hexa[i]>='A' && hexa[i]<='F')
        {
            val = hexa[i] - 65 + 10;
        }

        decimal += val * _pow(16,len);
        len--;
    }

    write("Hexadecimal number = %s\n",hexa);
    write("Decimal number = %lld",decimal);

    return 0;
}

on message *
{
  HexToDec(this.BYTE(2));  // for example 1A in hexadecimal
}

解决方法

您的要求“将十六进制转换为十进制”是错误的陈述。因为十六进制和十进制都是数字。您的函数 HexToDec 将字符串作为输入而不是数字。
如果要将 this.BYTE(2) 打印为十进制值,只需编写

write("Hex - %X",this.BYTE(2));
write("Dec - %d",this.BYTE(2));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?