【发布时间】:2019-08-16 12:40:05
【问题描述】:
我正在通过串行端口接收以下数据:<0x1b><0x2e><0x15>...'<>' 中包含的每个值都是一个字节。
我需要数据中的第三个字节,所以我这样做:
int Length;
char Data[..];
Length = Data[2];
但是 Length 的值是 21 而不是 15,因为写入内存的值是十六进制的。 如何将 15 的十进制表示转换为十进制 15?
我试过把它转换成各种类型等等.. 但这些都不适合我,因为我正在编写驱动程序,性能很重要。 我查看了 stackoverflow 和其他网站,但所有给定的示例都是字符串,没有一个是纯整数。
当我将它发送到算法的其余部分时,我遇到了算法预期 15 的问题。
【问题讨论】:
-
如何将十六进制格式的数字存储在数值变量中?十六进制可以包含字母。如果十六进制值为 0xFF 会发生什么?
-
我不明白这个问题。长度为十六进制
15,即十进制21。这些解释都没有存储在字节中,即二进制10101。第三个字节的值是15,如果你用%X打印它,21如果你用%d打印它。它们是相同的值。 -
与@WeatherVane 所写的相同...为什么值是十六进制或十进制很重要,只要它是正确的值?
-
21 是十进制值。也许您想知道如何将数字格式化为十六进制?
-
无论如何,尚不清楚您是否希望数据为 BCD,或者您是否根本不知道计算机/UART 如何存储数据。就目前而言,任何一个发布的答案都可能是正确的,但我们不知道其中哪一个。