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 長度的計算
- SQL Server 中 ntext 長度如何計算 ?SQLServer
- 什麼是計算機編碼的定義?計算機
- javascript計算字串長度程式碼例項JavaScript字串
- 如何理解用資訊熵來表示最短的平均編碼長度熵
- 32:行程長度編碼行程
- ThinkSNS+ 是如何計算字元顯示長度的(使用 Laravel 自定義驗證規則)字元Laravel
- 百度Apollo 3.5是如何設計Cyber RT計算框架的?框架
- opencv計算曲線長度OpenCV
- c語言中計算陣列長度的方法C語言陣列
- 單鞭天線的長度計算方法(轉)
- golang 計算最長不重複字串長度Golang字串
- JavaScript計算字串的長度區分中英文JavaScript字串
- JavaScript計算字串位元組長度JavaScript字串
- 計算機字元編碼的前世今生計算機字元
- 困惑度的計算
- kl散度如何計算
- 深度學習研究的新變化:教計算機如何編碼深度學習計算機
- Go 語言是如何計算 len() 的?Go
- css盒模型以及如何計算盒子的寬度CSS模型
- js區分gbk和utf-8的計算字串長度程式碼例項JS字串
- 計算機實際上是如何工作的計算機
- statspack中Library Hit是如何計算的?
- windows store app 如何計算字元所佔的寬度WindowsAPP字元
- 計算機執行彙編程式碼的原理計算機
- 我是如何學習計算機程式設計的計算機程式設計
- 使用PostGIS完成兩點間的河流軌跡及流經長度的計算
- 漫談計算機編碼計算機
- T1129 行程長度編碼行程
- 你不見得會計算C字串長度字串
- “雲端計算”工作是如何讓企業受益的?
- 我是如何使計算提速>150倍的
- 計算機底層是如何訪問顯示卡的計算機
- transformer的位置編碼具體是如何做的ORM
- c語言的strlen函式計算字元陣列長度不對C語言函式字元陣列
- go-dongle 0.0.2 版本釋出了,新增base58編碼解碼和aes解密解密支援Go解密
- 如何檢查你的計算機使用的是 UEFI 還是 BIOS計算機iOS