16进制字符串转化为10进制数

同学在MSN CDC电话面试(可惜我在被面试的时候全然没有这么具体的问题了:))中的一个题目:将16进制的字符串转化为10进制数字,例如“1A”,则对应26。题目很简单,实现起来也容易,依稀记得C里面有函数可以转化。刚好很久前有一个工作了的同学问起,自是给了一个方案。昨晚(050703)实在无聊,于是本着“写过才是自己的原则”,写了一个实现,其中对于16进制字符串非法的处理不是很好(返回-1),但是已经不想改了。(自己写的时候才知道原来Horner法则的实现都生疏了不少,思及最近多在模式、架构和软件过程、文档上花时间(项目使然,也没有办法:)),实在不能忘本了。)

      参考代码如下:

//main.cpp

 

#include <iostream>

using namespace std;

 

int StrToNum16(const char* str);

int Char16ToInt(char c);

bool IsValidateStr16(const char* str);

 

int main(int argc,char* argv[])

{

#ifdef _DEBUG

       char* str = "78AB";

 

       long i = StrToNum16(str);

 

       cout<<str<<" : "<<i<<endl;

 

#else

 

       cout<<"No test case...."<<endl;

 

#endif

 

       return 0;

}

 

int StrToNum16(const char* str)

{

       if (!IsValidateStr16(str))

       {

              cout<<"Invalidate Num str....."<<endl;

 

              return -1;

       }

 

       int len = strlen(str);

       int num = 0;

      

       for (int i = 0;i < len;i++)

       {

              num = num*16 + Char16ToInt(str[i]);

       }

 

       return num;

}

 

int Char16ToInt(char c)

{

       switch (c)

       {

       case '0':

              return 0;

              break;

       case '1':

              return 1;

              break;

       case '2':

              return 2;

              break;

       case '3':

              return 3;

              break;

       case '4':

              return 4;

              break;

       case '5':

              return 5;

              break;

       case '6':

              return 6;

              break;

       case '7':

              return 7;

              break;

       case '8':

              return 8;

              break;

       case '9':

              return 9;

              break;

       case 'A':

              return 10;

              break;

       case 'B':

              return 11;

              break;

       case 'C':

              return 12;

              break;

       case 'D':

              return 13;

              break;

       case 'E':

              return 14;

              break;

       case 'F':

              return 15;

              break;

       default:

              return 0;

              break;

       }

}

 

bool IsValidateStr16(const char* str)

{

       if (NULL == str)

       {

              return false;

       }

 

       int len = strlen(str);

 

       for (int i = 0;i < len;i++)

       {

              if (!(((str[i] >= '0') && (str[i] <= '9'))

                     || ((str[i] >= 'A') && (str[i] <= 'F'))))

                     return false;

       }

       return true;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

arch linux 入门,arch linux 从来就不是给新手入门用的

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼在学生的时候&#xff0c;常会有些科目议题难&#xff0c;大部分的人死命地猛读&#xff0c;却也考得低分&#xff1b;也是会有够聪明又考的高分的人&#xff0c;轻描淡写地说&#xff1a;没时间读&#xff0c;随便看一下&#xff…

【转】DCMTK各模块说明!!!!!!!

转自&#xff1a;https://blog.csdn.net/Kelvin_Yan/article/details/50765693 有删改 原文来自wiki DCMTK&#xff1a;http://support.dcmtk.org/redmine/projects/dcmtk/wiki/modules 各模块说明 These are the modules of the public DCMTK toolkit (version 3.6.0): 关…

IT农民工如何来美国工作

经历一年多的等待与折腾&#xff0c;终于来美国工作了。自打进入IT这一行那天起&#xff0c;就梦想着有一天能在硅谷的顶尖的IT公司上班&#xff0c;没想到梦想就这么成真了。当然&#xff0c;我的梦想不算远大。但是我觉得人的梦想是随着成长一点一点变大的。伟人们的远大理想…

【转】DICOM医学图像处理:基于DCMTK工具包学习和分析worklist

转自&#xff1a;https://blog.csdn.net/zssureqh/article/details/38775315 背景&#xff1a; DICOM3.0协议中有介绍关于worklist的部分。简而言之&#xff0c;worklist可以看做是放射科设备从医院RIS系统中自动读取患者信息的一种“通信协议”&#xff0c;可以指存储在RIS系…

libc.so.6linux查找,Linux中提示:/lib64/libc.so.6: version `GLIBC_2.17' not found 的解决办法...

昨天在服务器上安装好node之后&#xff0c;提示这个错误&#xff1a;./node: /lib64/libc.so.6: version GLIBC_2.17 not found (required by ./node)&#xff0c;今天把解决过程整理一下一、查看系统中可使用的glibc版本//使用strings命令查看strings /lib64/libc.so.6 |grep …

linux将汇编转为机器码,汇编语言 高级语言 机器语言 本地代码

不管是什么语言&#xff0c;最终都会转化为机器语言(本地代码)(机器码)&#xff0c;计算机程序的运行最终仍是以机器语言(本地代码)(机器码)运行的。java汇编语言&#xff1a;linux汇编语言是低级编程语言&#xff0c;不像高级语言有跨平台性&#xff0c;首先&#xff0c;CPU的…

【转】关于DCMTK中像素存储以及getoutdata()函数的使用

转自&#xff1a;https://blog.csdn.net/ancewer/article/details/73277895 有删改 当你看这个帖子的时候&#xff0c;假设你也因为这个问题而感到困惑。 在使用这个函数的时候纠结了很久&#xff0c;各种google、百度都没查到相关资料&#xff0c;测试了好多次&#xff0c;并…

【Visual C++】游戏开发笔记三十五 站在巨人的肩膀上:游戏引擎导论

看到在留言中很多朋友提到不太清楚DirectX与游戏引擎的区别的问题&#xff0c;在这里浅墨就专门把自己对游戏引擎的一些理解写成一篇文章&#xff0c;作为我们《Visual C游戏开发》专栏的游戏引擎导论&#xff0c;也希望能通过这篇文章&#xff0c;能让大家有所启发&#xff0c…

String ... String 三个点 jdk1.5的特性.才知道

String ... String 三个点 jdk1.5的特性.才知道 String... excludeProperty表示不定参数&#xff0c;也就是调用这个方法的时候这里可以传入多个String对象。public static void main(String[] args) {//测试&#xff0c;传入多个参数test("hello", "world"…

c语言大数相加oj,郑州轻工业大学oj题解(c语言)论如何正确的提高正确率:水题合集(四)...

好像离上一篇水题篇过去已经快半个月了~也是好久没有发过这些简单又有趣的题目了呢&#xff0c;今天想起来就总结几道吧。今天是看龙族的一天~ 花了一下午时间把《龙族2》看了2/3&#xff0c;看书的时间真的过的飞快&#xff0c;听着歌翻着书&#xff0c;一会4.5个小时就过去了…

【转】DICOM:DICOM Print服务中PresentationContext协商之 MetaSOPClass与SOPClass对比分析!!!!!!!!

转自&#xff1a;https://zssure.blog.csdn.net/article/details/45119841 背景&#xff1a; 最近项目中遇到的实际问题较多&#xff0c;且大多是较隐蔽的、不易被发现的错误。究其根源来看&#xff0c;还是对DICOM3.0协议中的细节掌握不够仔细&#xff0c;因而导致在实际编码…

2008秋季-计算机软件基础-未交实验报告名单

实验四 序号&#xff1a;108 实验五 序号&#xff1a;108&#xff0c;225&#xff0c;226 351 实验二 353 实验一 356 实验二 360 实验三 365 实验三 367 实验三 368 实验二 372 实验五 转载于:https://www.cnblogs.com/emanlee/archive/2008/11/02/1324910.html

操作系统真实的虚拟内存是什么样的

1. 内存及虚存基本布局 提起虚存&#xff0c;大都能说出几条来。 对于32位系统&#xff0c;大多数操作系统都会将4GB的内存空间的一部分挪给内核使用&#xff0c;应用程序无法直接访问这一段内存&#xff0c;这部分内存空间称为内核空间。Windows默认情况下会将高地址的2GB分配…

约瑟夫问题c语言链表解法,约瑟夫环问题 --链表 C语言

总共有m个人在圆桌上&#xff0c;依次报名&#xff0c;数到第n个数的人退出圆桌&#xff0c;下一个由退出人下一个开始继续报名&#xff0c;循环直到最后一个停止将编号输出#include #include typedef struct Head * PHead;typedef struct Node * PNode;struct Head{PNode Next…

【转】用fo-dicom实现print scu的注意事项!!!!!!!!!

转自&#xff1a;https://blog.csdn.net/tvsofa2008/article/details/50245357 用fo-dicom实现print scu的注意事项 fo-dicom是一个开源的协议库&#xff0c;开发语言是c#。网上针对fo-dicom的分析也有不少&#xff0c;但是专门针对dicom print的文章还是太少了。 近几天需要…

DELPHI串口通讯编程

spcomm更加简单 转贴 Delphi中串口通信的实现 河南省计算中心 张海航 -------------------------------------------------------------------------------- Delphi是一种具有功能强大、简便易用和代码执行速度快等优点的可视化快速应用开发工具&#xff0c;它在…

设计模式C++实现 ——观察者模式

观察者模式&#xff1a;定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。它还有两个别名&#xff0c;依赖(Dependents)&#xff0c;发布-订阅(Publish-Subsrcibe)。可以举个博客订阅的例子&…

【转】DCMTK开源库的学习笔记1:将DCM文件保存成BMP文件或数据流(即数组)

转自&#xff1a;https://blog.csdn.net/zssureqh/article/details/8784980 DCMTK开源库介绍&#xff1a; DCMTK是目前最全面实现DICOM3.0标准的开源库&#xff0c;通过结合DCMTK开源库和CxImage图像开源库&#xff0c;能够很方便的开发属于自己的DCM文件编辑浏览软件。 DCMT…

如何将C语言翻译成汇编语言,如何把汇编语言转换成C语言

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼程序:ORG 0000HLJMP MAINORG 000BHLJMP TIMEORG 1000HHOUR1 EQU 10hHOUR2 EQU 12hMIN1 EQU 14hMIN2 EQU 16hSEC1 EQU 18HCOUNT EQU 20HNUM1 EQU 22HNUM2 EQU 24HLL4 EQU 26Hs1 bit P1.0s2 bit P1.1s3 bit P1.2s4 bit P1.3A1 EQU 36…

数据库-Oracle【Oracle数据库设置默认表空间问题及Oracle,SQL,MySQL的自增变量设置】...

一、 Oracle数据库设置默认表空间问题 DBA们经常会遇到一个这样令人头疼的问题&#xff1a;不知道谁在Oracle上创建了一个用户&#xff0c;创建时&#xff0c;没有给这个用户指定默认表空间&#xff0c;所以这个用户就会采用默认的表空间——system表空间。导致系统表空间迅速被…