三种方法:stoi,strtol,sscanf

各函数具体用法本文不赘述。

测试一:只含数字的十六进制字符串

string str("123");
int a = stoi(str,0,16);
int b = strtol(str.c_str(),0,16);
int c;
sscanf(str.c_str(),"%X",&c);
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;

结果:

a = 291
b = 291
c = 291

测试二:含有数字和字母的十六进制字符串

    string str("0x1f42a");  //0x 前缀有没有都可以int a = stoi(str,0,16);int b = strtol(str.c_str(),0,16);int c;sscanf(str.c_str(),"%X",&c); //X不分大小写cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;

结果:

a = 128042
b = 128042
c = 128042

测试三:空串(本文的主要目的)

string str("");
int a;
//a = stoi(str,0,16);
int b;
b = strtol(str.c_str(),0,16);
int c;
sscanf(str.c_str(),"%X",&c);
//cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;

结果:

stoi会抛异常:terminate called after throwing an instance of ‘std::invalid_argument’
what(): stoi
b = 0
c = 120135921

针对空白字符串的结论:stoi抛异常,程序终止;strtol返回0(我最喜欢……);sscanf不执行转换。

测试四:超出范围

    string str("12345678123456781");int a;
//    a = stoi(str,0,16);  //stoi抛异常,程序结束int b;b = strtol(str.c_str(),0,16); //64位系统下,long int为8字节int c;sscanf(str.c_str(),"%X",&c);printf("%d,%s \n",errno,strerror(errno));
//    cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;

结果:

terminate called after throwing an instance of ‘std::out_of_range’
what(): stoi
error: Numerical result out of range
b = -1
c = -1

strtol和sscanf都返回-1,并将 errno 的值设置为 ERANGE。

测试五:字符串中含有空格

    string str("34 12");   // "   34 12" 、"  34*12"结果一样int a;a = stoi(str,0,16);int b;b = strtol(str.c_str(),0,16);int c;sscanf(str.c_str(),"%X",&c);
//    printf("%d,%s \n",errno,strerror(errno));cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;

结果:

a = 52
b = 52
c = 52

结论:三个函数都是忽略开始的空格,直到再次遇到空格或其它无效字符为止,取中间有效字符转换。

针对普通字节流通讯中十六进制数据包解析的应用:
stoi最严格,一言不合抛异常,程序终止,不太适合变长数据包的解析,因为被访问的字节可能是空串,但是比较适合定长数据包的解析。strtol 比较适合变长数据包的解析,容错性好,空串返回0,适合逻辑判断。sscanf,不!喜!欢!,但不拒绝使用……

c++十六进制字符串转int型三种方法的测试总结相关推荐

  1. python字符串解密代码,python字符串加密解密的三种方法分享(base64 win32com)

    1. 最简单的方法是用base64: import base64 s1 = base64.encodestring('hello world') s2 = base64.decodestring(s1 ...

  2. 字符串倒序输出的三种方法-java版

    目录 法一(拆分字符数组): 法二(利用字符串串联符号"+"特性): 法三(StringBuilder的reverse()方法): 法一(拆分字符数组): public class ...

  3. 用JavaScript去除字符串两端空格(三种方法)

    //方法一:正则表达式 function _trim(string) {// 补全代码var reg=/^\s*|\s*$/g;//使用正则表达式,\s为空格,^\s为开头的空格,*代表0个或多个,\ ...

  4. Java 替换字符串中空格的三种方法

    1.方法分类 str.trim(); //去掉首尾空格 str.replace(" ",""); //去除所有空格,包括首尾.中间 str.replaceAll ...

  5. Java中用三种方法输出字符串_java中两个字符串连接的三种方法

    java中两个字符串连接有以下三种方法: 第一种方法:使用+: 第二种方法:使用concat(): 第三种方法:使用append(): 如下代码: public class Practice { // ...

  6. 关于整型转字符串的三种方法

    首先声明,我写博客很大程度是为了记录和分享我的编程之路,如果后来人是在百度上面搜到我的文章,动机不是为了知识本身,而是为了应付题目的话,我话摆在这里,借鉴可以,但是一定要转化成自己的知识,不要只抄,然 ...

  7. 在 C# 中,(int) ,Int32.Parse() 和 Convert.toInt32() 三种方法的区别

    在 C# 中,(int),Int32.Parse() 和 Convert.toInt32() 三种方法有何区别? int 关键字表示一种整型,是32位的,它的 .NET Framework 类型为 S ...

  8. 三种方法求字符串长度

    在求字符串长度时,第一时间会想到运用strlen这个函数,但对于初学者来说,除了掌握这个函数之外,还应当自己写函数来实现相似的功能. 接下来我列举了三种方法来求字符串长度,供大家参考: (1)运用st ...

  9. C# 中对象与JSON字符串相互转换的三种方法

    JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式. 关于内存对象和JSON字符串的相互转换,在实际项目中应比较广泛,经过一番搜索,找到如下 ...

最新文章

  1. putty改oracle数据库密码,用putty远程访问虚拟机linux系统Oracle数据库。
  2. Java多线程:synchronized关键字和Lock
  3. Linux 操作系统原理 — I/O 系统
  4. 《系统集成项目管理工程师》必背100个知识点-86项目总结会议讨论的内容
  5. linux下配置某程序的sudo不用输密码
  6. 自动驾驶汽车定位技术
  7. snmp基本介绍--理解OID/MIB/snmp报文类型/snmp版本
  8. Hive partition prune Failed
  9. 记录自己的第一次实习
  10. 华为最强自研 NPU 问世,麒麟 810 测评远超骁龙系列!
  11. 聊聊调度框架,K8S、Mesos、Swarm 一个都不能少
  12. java404_java这个404你能解决吗?
  13. 「2020目标一」项目管理PMP
  14. Delphi Xe Web开发之 unigui入门视频教程
  15. WIN7 Activation
  16. php 硬盘序号_关于取硬盘序列号
  17. python语言折半查找_c# 折半查找法实现代码
  18. java 保存gif图片_java gif图片保存处理逻辑
  19. # [1007]魔法少女小Scarlet
  20. C++模拟与高精度——玩具谜题

热门文章

  1. 获取微信公众号openID,code
  2. 24、简单的影视制作
  3. python pyplot画图_matplotlib.pyplot绘图显示控制方法
  4. 广西地图html插件,ECharts绘制中国地图、广西地图
  5. 龙腾10.1寸屏M101NWT2 R1PDF规格资料参数
  6. EXACT函数——检验两个数据是否一样
  7. Hyperledger Fabric 2.2实战记录(二)
  8. 机会均等,看你懂不懂得珍惜。
  9. BAT (中国互联网公司三巨头)
  10. 数字量模块的工作原理讲解