c - 十六进制到十进制的转换 [K&R 练习]

标签 c kernighan-and-ritchie

我正在学习 C,但我想不出一个 K&R 练习, list :

Exercise 2-3, Write the function htoi(s), which converts a string of hexadecimal digits (including an optional 0x or 0X) into its equivalent integer value. The allowable digits are 0 through 9, a through f and A through F.

我想我需要在这里做一些递归,我只是想我不太了解编号类型,以及它们的各种转换方法等。

有人能给我一些关于如何最好地理解它的指示吗,我不是在找人牵着我的手,而是指导我找到一种正确理解的方法,这样我就可以尽可能以最优雅的形式写出来,而不是 printf("%x", skill);

最佳答案

不需要递归。您只需要在字符串上向后循环(即从单位列开始),将单个数字转换时间与它的基数位置乘数相加。这是伪代码,不处理可选的 0x 前缀(并且不检查溢出的可能性):

long total = 0;
long multiplier = 1;
for (int i = string.length - 1; i >= 0 i--)
{
   digit = ConvertSingleHexDigittoInt(string[i]);
   total += digit * multiplier;
   multiplier *= 16;
}

我把 ConvertSingleHexDigittoInt() 的简单实现留给了你:)

关于c - 十六进制到十进制的转换 [K&R 练习],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/788026/

相关文章:

c - 即使两个字符串都正常,strcmp 也会崩溃

c - 删除尾随空格的程序不起作用! :(

c - 为什么函数声明在源文件的顶部附近?

c - 标准库包含多个文件多次?

c - 当它是 pb_callback_t 类型时如何编码字符串

c - C中如何将字符串类型的数据存储在链表中?

c - 用于稀疏、惰性、不可变数组的线程安全缓存

c - GSS-API 接受上下文时出错 : Service key not available - Solaris code, Windows KDC

c - 理解 k&r 中的 entab 示例代码

c - K&R 练习 6-2 - 自引用结构