日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/10 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 16进制字符串转化为10进制数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

同學(xué)在MSN CDC電話面試(可惜我在被面試的時(shí)候全然沒有這么具體的問題了:))中的一個(gè)題目:將16進(jìn)制的字符串轉(zhuǎn)化為10進(jìn)制數(shù)字,例如“1A”,則對(duì)應(yīng)26。題目很簡(jiǎn)單,實(shí)現(xiàn)起來也容易,依稀記得C里面有函數(shù)可以轉(zhuǎn)化。剛好很久前有一個(gè)工作了的同學(xué)問起,自是給了一個(gè)方案。昨晚(050703)實(shí)在無聊,于是本著“寫過才是自己的原則”,寫了一個(gè)實(shí)現(xiàn),其中對(duì)于16進(jìn)制字符串非法的處理不是很好(返回-1),但是已經(jīng)不想改了。(自己寫的時(shí)候才知道原來Horner法則的實(shí)現(xiàn)都生疏了不少,思及最近多在模式、架構(gòu)和軟件過程、文檔上花時(shí)間(項(xiàng)目使然,也沒有辦法:)),實(shí)在不能忘本了。)

????? 參考代碼如下:

//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;

}

總結(jié)

以上是生活随笔為你收集整理的16进制字符串转化为10进制数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。