Base58編碼的長度是如何計算的?
base58 是由中本聰為bitcoin設計的。
相比與base64的字元,他將一些直觀看來模糊的字元去除了。
字元共58個
1-9 共9個
大寫字母A-Z(不包括O、I),共24個
小寫字母a-z (不包括l),共25個
在一些base58的實現程式碼中,我們往往需要為生成的編碼後的字串預留空間,這是如何計算的呢?
例如一段原始碼及註釋:
std::vectorb58((pend - pbegin) * 138 / 100 + 1); // log(256) / log(58), rounded up
這個公式看起來有點讓人摸不著頭腦,但經過一些思考,我想明白了。
在編碼後的字串中,每一個字元都是從58個字元中當中選擇出來的。那麼這58種不同的資訊可以用多少bit來代替呢?顯然答案是log(2)58。換句話說,每一個字母代表的資訊量是log(2)58 bit。
我們輸入的位元組流資訊量是固定的:(byte_length * 8)bit
那麼,需要預留的字元數量就是(byte_length * 8)/ log258
經過換算,
(byte_length * 8)/ log258 =
(byte_length * log2256) / log258 =
byte_length * 1.38
最後,還需要加向上取整
最終結果就是 byte_length * 1.37 + 1
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2334/viewspace-2809189/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C語言如何計算陣列的長度C語言陣列
- Lua Table 長度的計算
- 什麼是計算機編碼的定義?計算機
- 百度Apollo 3.5是如何設計Cyber RT計算框架的?框架
- c語言中計算陣列長度的方法C語言陣列
- 計算機字元編碼的前世今生計算機字元
- opencv計算曲線長度OpenCV
- 如何增長程式碼長度
- 困惑度的計算
- T1129 行程長度編碼行程
- golang 計算最長不重複字串長度Golang字串
- 深度學習研究的新變化:教計算機如何編碼深度學習計算機
- JavaScript計算字串位元組長度JavaScript字串
- kl散度如何計算
- Go 語言是如何計算 len() 的?Go
- 計算機執行彙編程式碼的原理計算機
- css盒模型以及如何計算盒子的寬度CSS模型
- 漫談計算機編碼計算機
- transformer的位置編碼具體是如何做的ORM
- 我是如何使計算提速>150倍的
- windows store app 如何計算字元所佔的寬度WindowsAPP字元
- 如何計算並測量ABAP及Java程式碼的環複雜度Cyclomatic complexityJava複雜度
- 如何檢查你的計算機使用的是 UEFI 還是 BIOS計算機iOS
- 計算機編碼規則之:Base64編碼計算機
- [計組] 計算機編碼方式:原碼、反碼、補碼計算機
- go-dongle 0.0.2 版本釋出了,新增base58編碼解碼和aes解密解密支援Go解密
- Java中Short型別轉換為Int型別是如何計算的?原碼、反碼、補碼是什麼?Java型別
- 使用PostGIS完成兩點間的河流軌跡及流經長度的計算
- 時間複雜度的計算時間複雜度
- 你不見得會計算C字串長度字串
- c語言的strlen函式計算字元陣列長度不對C語言函式字元陣列
- Calendar原始碼--JDK是怎麼計算時間的原始碼JDK
- Google程式設計師的一天是如何度過的?Go程式設計師
- “雲端計算”工作是如何讓企業受益的?
- 時間複雜度怎麼算?如何計算時間複雜度?時間複雜度
- 一個碼農是如何用遊戲推動計算機圖形學的?遊戲計算機
- 你真的知道計算機是如何進行減法運算的嗎?計算機
- 什麼是遊戲陪玩app原始碼開發的過度設計,如何避免?遊戲APP原始碼