c - 如何仅使用 C 中的整数将十六进制转换为十进制

标签 c hex decimal

我通过串行端口接收以下数据:<0x1b><0x2e><0x15>...
'<>' 中包含的每个值是一个字节。
我需要数据中的第三个字节,所以我这样做:

int Length;
char Data[..];
Length = Data[2];

但是 Length 的值为 21 而不是 15,因为写入内存的值是十六进制。 如何将 15 的十进制表示形式转换为十进制 15?

我尝试过将其转换为各种类型等等.. 但这些对我来说都不起作用,因为我正在编写驱动程序,性能非常重要。 我查看了 stackoverflow 和其他网站,但所有给定的示例都是字符串,没有一个是普通整数。

当我将其发送给算法的其余部分时,我遇到了问题,因为算法期望 15。

最佳答案

给定 int x ,其中包含使用 natural packed binary-coded decimal 表示数字的 8 位,它们可以转换为数字:

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

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

关于c - 如何仅使用 C 中的整数将十六进制转换为十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57524824/

相关文章:

c - 如何在linux上的两个进程之间使用c中的posix命名信号量来共享内存?

c - 迭代 C 数组的语法

python - matplotlib 中的十六进制 X 轴?

c++ - 小数到任何基数 <17 计算器 c++

c# - 将实际的十进制值作为属性的参数(例如 xUnit.net 的 [InlineData]

c - 阶乘的时间复杂度

c++ - 关于矩阵计算,是否有 MATLAB 的快速且免费的替代方案?

c++ - 十六进制字符串的最佳哈希函数是什么?

bash - 在 Unix shell 中,如何以机器字节顺序将十六进制字符串转换为标准输出字节

sql - 我如何在 postgresql 中转换为 DECIMAL?