Why do we use n = 16 * n + hexdigit

Go to my personal blog

There is a program to convert a string of hexadecimal digits into its equivalent integer value as below.

enum loop {NO, YES};

/* htoi: convert hexadecimal string s to integer */
int htoi(char s[])
{
    int hexdigit, i, n;
    enum loop inhex;

    i = 0;
    if (s[i] == '0') {     /* skip optional 0x or 0X */
        ++i;
        if (s[i] == 'x' || s[i] == 'X')
            ++i;
    }
    n = 0;              /* integer value to be returned */
    inhex = YES;        /* assume valid hexadecimal digit */
    for ( ; inhex = YES; ++i) {
        if (s[i] >= '0' && s[i] <= '9')
            hexdigit = s[i] - '0';
        else if (s[i] >= 'a' && s[i] <= 'f')
            hexdigit = s[i] - 'a' + 10;
        else if (s[i] >= 'A' && s[i] <= 'F')
            hexdigit = s[i] - 'A' + 10;
        else
            inhex = NO;
        if (inhex == YES)
            n = 16 * n + hexdigit;
    }
    return n;
}  

Why do we use ‘n =
16 * n + hexdigit‘ to compute the value ? The figure below gives the reason.

Similarly,
we can use n = 8 * n + octdigit to
convert octal string, we can use n = 2 * n + bindigit to
convert binary string, too.

A
program to convert hexadecimal string.

时间: 2024-07-30 20:27:49

Why do we use n = 16 * n + hexdigit的相关文章

扩展《C程序设计语言》练习2-3程序通用性

最近开始自学C语言,在看K&R的<C程序设计语言>.练习2-3要求写一个函数,将输入的十六进制数字字符串转换成与之等价的整数值,配套答案没有扩展程序的通用性,所以我就稍微改造改造. 配套的答案是这样的(自己添加了注释): 1 #define YES 1 2 #define NO 0 3 4 /* htoi:将十六进制数字字符串转换成十进制数 5 * 如果发现'0x'或'0X'则跳过并设置十六进制数的起点 6 * 检查后续字符是否是0-9,a-f或是A-F 7 * 如果是则将其转换为整形

htoi的实现

1 /************************************************************************* 2 > File Name: htoi.c 3 > Author: ChenPeng 4 > Mail:[email protected] 5 > Blog: http://www.cnblogs.com/cpsmile/ 6 > Created Time: Fri 03 Apr 2015 07:22:15 PM CST 7

ecma5

介绍 这一Ecma标准建立在一些原本的技术上,最为著名的是JavaScript(网景)和JScript (微软).语言由网景的Brendan Eich发明而第一次出现在这个公司的Navigator 2.0浏览器上.它出现在所有Netscape后来的浏览器以及微软从Internet Explorer 3.0之后的所有浏览器上. 这一标准的编制自1996年十一月开始.这一Ecma标准的第一个版本被1997年六月的Ecma General Assembly采纳. 上述Ecma标准被以快速跟进流程提交至

便是见到前方那

以可得量力而凌厉刀芒横扫http://weibo.com/2015.09.16/p/1001603887144312655250http://weibo.com/2015.09.16/p/1001603887144321088567http://weibo.com/2015.09.16/p/1001603887144325238274http://weibo.com/2015.09.16/p/1001603887144325282921http://weibo.com/2015.09.16/p/

对于这黑马之会

是想不出究竟还只是区区一角啊http://weibo.com/2015-09.16/p/1001603887574727917787http://weibo.com/2015-09.16/p/1001603887574727946828http://weibo.com/2015-09.16/p/1001603887574732112097http://weibo.com/2015-09.16/p/1001603887574732112103http://weibo.com/2015-09.16/

Sublime Text 常用的16 个 Sublime Text 快捷键

在我做了一次包含一些现场编码的演示后,一些观众问我是如何操作这么快.当然这里没有唯一的答案,答案是一堆简单的快捷键和大量的实践的组合.为了回应那些询问,我觉得有必要看看我每天想都不用想且使用的快捷键. 这里有一个15 16 个快捷键的精选列表(1个自定义快捷键),以gif动画展示,我每天使用.享受吧! (译者注:原文所列快捷键均为OS X环境,为了方便Windows和Linux环境童鞋的学习,译者将备注Windows和Linux下对应的快捷键) 选择 选择一个选中项的下一个匹配项 选择一个选中项

Ubuntu 16.04编译Android 7.1.2

折腾了很久,终于搞定了这个环境.记录一下. 准备工作: 1. 首先在Ubuntu官网上下载Ubuntu16.04的官方镜像.官网下载地址(这个找了很久,这里可以直接下载ISO镜像):https://launchpad.net/ubuntu/+cdmirrors 2. 建议直接安装到自己硬盘上(推荐双系统),不要在虚拟机上搞,除非你有足够大的SSD.我之前在虚拟机上试过,电脑的性能完全发挥不出来,后来搞了双系统,发现一切都是那么舒服. 3. Android源码下载方法:https://lug.us

Ubuntu 16.04安装RabbitVCS替代TortoiseSVN/TortoiseGit

RabbitVCS官网:http://www.rabbitvcs.org/easonjim 1.添加PPA源 sudo add-apt-repository ppa:rabbitvcs/ppa 如果导入密钥失败,则在/etc/apt/sources.list文件中加入下面的文字(signing key=1024R/34EF4A35): deb http://ppa.launchpad.net/rabbitvcs/ppa/ubuntu **DISTRIBUTION** main 提示:一般在16.

如何理解“字符串是一组由16位组成的不可变的有序序列”

疑惑点: 1.16位 2.不可变 3.有序序列 解惑: 1.16位指的是:字符串每个字符所占用的空间为16bits 比特(2 bytes);这是因为JS采用的是unicode编码,每个字符需要2个字符. 2.不可变指的是: 字符串对象一旦创建出来,便不能被更改.这可能有些难理解,但事实确实如此.你可能会认为s+='1' 只是在 s 后面增加一个元素 1 而已,但事实是: 先将 s 拷贝一份,记为 temp 在 temp 末尾加上'1' 将 s 变量指向 temp,并删去原来的s 这一特性,可以从