【发布时间】:2021-09-08 01:57:49
【问题描述】:
我需要编写一个函数,将我在 CAN 总线上收到的消息中的消息字节 (this.byte(2)) 从十六进制转换为十进制。 例如,我在 CAN 总线上显示以下消息“F1 02 1A 13 00 00 00 00”然后该函数应为 this.byte(2)“1A”返回值 26。
我遵循了一些在互联网上找到的示例,但我仍然没有得到正确的值。 那么我的功能有什么问题呢?
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
}
【问题讨论】:
-
你的变量
hexa的内容是什么?是十六进制字符吗?例如。F应该转换成15?或者它是一个 raw 值,例如0x0F应该转换为15? -
@M.Spiller 内容应该是我要转换的“this.byte(x)”。我不确定 CANoe 作为变量返回了什么,但我想它可能返回 0F,这就是我写 hex[2] 的原因,显然这是错误的,这就是我在这里问的原因。当我使用 ``write(" Byte : %x ", this.byte(2));` 时,我得到例如 "0F"。
-
你不能把它分配给 long 变量吗?喜欢
decimal = this.byte(2)