【问题标题】:How to convert from Hex to Decimal using only Integers in C [closed]如何仅使用 C 中的整数从十六进制转换为十进制 [关闭]
【发布时间】: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 如何存储数据。就目前而言,任何一个发布的答案都可能是正确的,但我们不知道其中哪一个。

标签: c hex decimal


【解决方案1】:

给定 int x 包含 8 位使用 natural packed binary-coded decimal 表示数字,它们可以通过以下方式转换为数字:

int y = x/16*10 + x%16;

x/16 产生高四位,然后乘以十将它们缩放到十位。 x%16 产生低四位。它们保持在个位并添加到十位。

【讨论】:

    猜你喜欢
    • 2013-05-19
    • 2018-11-18
    • 2017-08-12
    • 2010-10-16
    • 1970-01-01
    • 2014-04-16
    • 2014-12-31
    相关资源
    最近更新 更多