在C语言某个程序当中需要把文本16进制转换成对应的16进制数,比如字符串"0x1a"转换成10进制的26,可以用以下函数来实现
相关函数: atof, atoi, atol, strtod, strtoul
表头文件: #include <stdlib.h>
定义函数: long int strtol(const char *nptr, char **endptr, int base);
函数的解释说明
这个函数会将参数nptr字符串根据参数base来转换成长整型数。参数base范围从2至36,或0。参数base代表采的进制方式,如base值为10则采用10进制,若base值为16则采用16进制等。当base值为0时则是采用10进制做转换,但遇到如’0x’前置字符则会使用16进制做转换、遇到’0’前置字符而不是’0x’的时候会使用8进制做转换。一开始strtol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时('\0')结束转换,并将结果返回。若参数endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr返回;若参数endptr为NULL,则会不返回非法字符串。
strtol是atoi的增强版
主要体现在这几方面:
1.不仅可以识别十进制整数,还可以识别其它进制的整数,取决于base参数,比如strtol("0XDEADbeE~~", NULL, 16)返回0xdeadbee的值,strtol("0777~~", NULL, 8)返回0777的值。
2.endptr是一个传出参数,函数返回时指向后面未被识别的第一个字符。例如char *pos; strtol("123abc", &pos, 10);,strtol返回123,pos指向字符串中的字母a。如果字符串开头没有可识别的整数,例如char *pos; strtol("ABCabc", &pos, 10);,则strtol返回0,pos指向字符串开头,可以据此判断这种出错的情况,而这是atoi处理不了的。
3.如果字符串中的整数值超出long int的表示范围(上溢或下溢),则strtol返回它所能表示的最大(或最小)整数,并设置errno为ERANGE,例如strtol("0XDEADbeef~~", NULL, 16)返回0x7fffffff并设置errno为ERANGE

将字符串a, b, c 分别采用10, 2, 16进制转换成数字
------------------------------------------------
#include <stdlib.h>
#include <stdio.h>
int main()
{
 char a[] = "100";
 char b[] = "100";
 char c[] = "0x11";
 int x, y, z;
 x = strtol( a, NULL, 10 );
 y = strtol( b, NULL, 2 );
 z = strtol( c, NULL, 16 );
 printf( "x = %d\n", x );
 printf( "y = %d\n", y );
 printf( "z = %d\n", z );
}
输出:x = 100
      y = 4
      z = 17

举例说明:字符串b中的每个字符在内存中都占有一个字节(1 Byte = 8 bits)的空间,将若干个(3个)字节中的内容转换成二进制的数字(字符串"100"去掉双引号后是一个二进制的数字100),让后将该二进制数字以十进制的形式4打印出来

转载于:https://www.cnblogs.com/dyllove98/p/3153509.html

C语言中字符串如何转换为二进制、八进制、十进制、十六进制相关推荐

  1. c语言字符串转成二进制,C语言中字符串如何转换为二进制、八进制、十进制、十六进制...

    在C语言某个程序当中需要把文本16进制转换成对应的16进制数,比如字符串"0x1a"转换成10进制的26,可以用以下函数来实现 相关函数: atof, atoi, atol, st ...

  2. python十六进制转换成八进制_Python 进制转换 二进制 八进制 十进制 十六进制

    全局定义一定不要丢了 全局定义 base = [str(x) for x in range()] + [ chr(x) for x in range(ord('A'),ord('A')+)] 二进制 ...

  3. 二进制 八进制 十进制 十六进制

    2->8:从个位开始把二进制数三个一组分组,然后每组分别换成8进制, 例:11,101,100 就是分组后的结果 11->3 101->5 100->4 所以结果是354 8- ...

  4. 【笔记】二进制八进制十进制十六进制互转详细教程和范例

    最近复习之前的笔记基础.又把进制转换理解了一遍.放在这里以后备查.同时作为分享. 二进制转换八进制十进制十六进制 例: 11010 二进制转换八进制 需要2进制数字为每3位分组的十进制数,不足3位的倍 ...

  5. 计算机系统中常用的进制,计算机中常用 二进制 八进制 十进制 十六进制的特点...

    计算机中常用的计数制 用若干数位(由数码表示)的组合去表示一个数,各个数位之间是什么关系,即逢"几"进位,这就是进 位计数制的问题.也就是数制问题.数制,即进位计数制,是人们利用数 ...

  6. 二进制 八进制 十进制 十六进制 之间进制转换(图解篇)

    一.本文所涉及的内容(Contents)                      目录 一.本文所涉及的内容(Contents) 二.背景(Contexts) 三.进制转换算法(Convert) ( ...

  7. 二进制八进制十进制十六进制及原码反码补码

    1.进制的介绍 定义:进位制,人们规定的一种进位方式:表示某一位置上的数,运算时是逢X进一位. 十进制是逢十进一:二进制是逢二进一,八进制是逢八进一: 常见进制:二进制,八进制,十进制,十六进制: 学 ...

  8. 二进制 八进制 十进制 十六进制的相互转换(精简总结)

    之前看到的都是铺垫这术语那术语的,看了半天,还不知道怎么处理.这里就根据各种文章和自己的理解总结一小下下,  不一定准确,省略一些概念等繁琐的陈述,直接上结论 1.二进制转八进制:以小数点为分界线,各 ...

  9. Java byte[] 字节数组 转 二进制 八进制 十进制 十六进制字符串

    [前言] Java中很多时候需要将byte[]转为各种进制的字符串显示,从2,8,10,16到比较高级的base64(编码), 至于什么时候需要这样,当你遇到这样的问题就知道了. [代码] 进制转换比 ...

最新文章

  1. leetcode89. 格雷编码
  2. 基于Hadoop的产品大数据分布式存储优化
  3. 动态生成类_springboot动态生成类属性
  4. flex3 接受外部参数
  5. 使用RabbitMQ实现延迟任务
  6. Slog29_支配vue框架初阶项目之博客网站-注册页面-单选按钮
  7. Mysql自增id用完怎么办?
  8. 互联网小团队创业 第三集 创业准备易犯的错误 汪华
  9. 计算机考研专业课408什么意思,考研408是什么意思
  10. python numpy逆_Numpy 中的矩阵求逆实例
  11. Android图片轮播控件
  12. 蓝桥杯——摔手机 动态规划
  13. java课程设计打字训练测试软件_打字训练测试软件-Java课程设计
  14. 下午到英东游泳馆游泳了
  15. 【LeetCode】190. 颠倒二进制位 easy / bitset / stoul
  16. Ubuntu环境下moos-Ivp编译
  17. 发挥强大资源优势,移动云助推高校人才培养
  18. 【视频直播场景下P2P对等网技术①】挑战与形式化分析
  19. linux 易语言窗口程序_易语言开发Linux程序
  20. Raid管理、madam、Linux LVM的管理与使用

热门文章

  1. 小白兔生小白兔-菲波拉契数列问题
  2. javaScript高程笔记--最佳实践
  3. C高级第一次PTA作业(2)
  4. 第十六章:Java内存模型——Java并发编程实战
  5. 实例1.2:获得应用程序主窗口指针
  6. SqlServer2008 安装经验日志总结
  7. dll放在unity哪个文件夹下_unity中调用dll文件总结
  8. 改造一下jeecg中的部门树
  9. Struts2的通配符配置方式
  10. 西电计算机科学院实践中心,计算机基础教学实验中心