如何解决如何将消息的值从十六进制转换为十进制?
我需要编写一个函数,将我在 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 举报,一经查实,本站将立刻删除。