任意長度十進位制字串轉十六進製制字串

2021-09-29 05:18:04 字數 2223 閱讀 8413

所謂十進位制轉換十六進製制,其實就是要了解轉換原理,再把數學邏輯翻譯成**邏輯;

比如十進位制字串 "12345678" 轉換之後為 "bc614e";

順帶普及下十六進製制值:

十六進製制,顧名思義,就是每個字元位的取值範圍為 0~15;

其中: 十進位制值 十六進製制值

0 0

1 1

2 2

3 3

4 4

5 5

6 6

7 7

8 8

9 9

10 a/a

11 b/b

12 c/c

13 d/d

14 e/e

15 f/f

數**算過程如下:

除法運算第一步:

771604

_____________

16 | 12345678

112---------------------

114112

---------------------

2516

---------------------

9696

---------------------

07864

---------------------

14除法運算過程,小學知識,就當大家都會吧;

最後得到餘數14,對應十六進製制符號就是'e'

除法運算第二步:

48225

__________________

16 | 771604

64----------------------

131128

----------------------

3632

----------------------

4032

----------------------

8480

----------------------

4

...

省略吧,後面的就不羅嗦了,之後算出來的餘數分別為

1 6 12 11

分別對應十六進製制字元為

1 6 c b

所謂餘數,就是剩餘的數量,當然是越先算出來,地位就越低,

所以,最終結果是 bc614e ;

常規表示十六進製制加字首 0xbc614e ;

當然,我們這裡需要的是字串形式,也就不需要字首了,直接就是 "bc614e";

以下臨時寫的演算法,雖然不算很好,但也能實現轉換過程,當個參考吧:

void docstrtohexstr(const in std::string& ssource, out std::string& sdesc)

else if (ssubsrc.length())

}if (dwyushu >= 10)

ssubdesc.push_back('a' + dwyushu - 10);

if (ssubsrc.empty())

else

stmp = ssubsrc;

ssubsrc.clear();

} for (auto it = ssubdesc.rbegin(); it != ssubdesc.rend(); ++it)

}

最後,或許有人不懂  dwzhengshu + '0'  是什麼意思,

解釋下,比如

dword dwzhengshu = 1;

char cdata = dwzhengshu + '0';

//最終得到cdata='1'

//很明顯這個過程就是實現數字到字元的轉換過程

//反過來, ('1' - '0') 就是把字元 '1' 轉成數字 1

十六進製制以內任意進製數轉十進位制

十六進製制以內任意進製數轉十進位制的c語言實現 include include include include include int parseint char str,int type if type 16 else if tmpchar a tmpchar f else else printf...

十六進製制轉十進位制

create function fn hextobinary hex varchar 8 returns varchar 255 asbegin declare base tinyint declare string varchar 255 declare return varchar 255 de...

十進位制轉十六進製制

問 題 描 述 十 六 進 制 數 是 在 程 序 設 計 時 經 常 要 使 用 到 的 一 種 整 數 的 表 示 方 式 它 有0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f 共 16 個符號,分別表示十進位制數的 0 15。十六進製制的計數方法是滿16 進 1,所以十進位制數...