我有一个读取HEX字节的串行事件。它存储为表示HEX值的INT。我需要将其转换回Dec值。
示例:
串行发送0x20 - 存储为INT 32 - 我想将其转换为INT 20
我试过以下但是它打印好但不会转换。我怎么也得到它。
Sudo Code:
int from_ser;
int new_value;
Serial.println(from_ser); // Prints 32
Serial.println(from_ser,HEX); // Prints 20 ( The value we want!)
new_value = (from_ser,HEX);
Serial.println(new_value); // Prints 16 - Why !!!
由于
答案 0 :(得分:2)
Serial.println(from_ser,HEX); // Prints 20 ( The value we want!)
这是Serial上println方法的一个功能。在决定如何格式化第一个参数中的值时,会有代码检查第二个参数。请注意,HEX只是一个值为16的显式常量。
new_value = (from_ser,HEX);
这是一种完全不同的表达方式。在C ++中,您可以使用逗号分隔两个表达式,代码将评估两个表达式并生成第二个表达式的值。此处HEX
是第二个值,它只是16
的名称,因此new_value
被分配给整数16。
答案 1 :(得分:1)
格式化为十进制或十六进制是对OUTPUT的操作。它不会影响变量的实际值,也不会给出具有不同值的整数。它只是以不同方式格式化输出。所以你的“转换”价值的问题毫无意义。只需通过指定的方式发送变量。
在C ++中,表达式a , b
中的逗号运算符评估a
并丢弃结果,然后给出评估b
的结果。因此new_value = (from_ser, HEX)
给出HEX
的值。输出new_value
后,您证明HEX
的值为16
。
答案 2 :(得分:-1)
0x20(十六进制)是32(十进制)。你为什么要20岁?那是错的。 你会用0xFF做什么呢?