1byte = 8bit (1字节等于8比特)
MySQL数据库整数类型介绍
前两天写了一篇文章,是介绍如何将32-byte的MD5转为整型来保存,最后使用了两个ubiging和一个uint来保存,共使用20个字节,有兴趣的可以翻翻我的文章。在评论区里有各路大神提出建议和思路,令我豁然开朗,或许还有更简便的方法,使用更少字节来保存32-byte的MD5。
在这篇文章里我将讲解一下思路,最后可以将32-byte的MD5转为两个ubigint来保存,共16个字节。对文字没有兴趣的同学可以直接看github的demo,点击文章最下方的“了解更多”可跳转到我的github页面,用golang实现的。
这里并不打算长篇大论地讨论MD5的由来,只是简单梳理一下。
MD5是一个128bit的大整数,而每8bit为1个字节,每个字节所能表示的最大范围为[0,2^9-1=511]。
这超出了ascii码所能表示的范围,无法将MD5打印出来。因此将每个字节的高低位拆分一个字节,这样每个字节所能表示的最大范围为[0,2^5-1=31]。这样一来,原本16个字节(128/8=16)的MD5就变成了32个字节(128/4=32)。
认清了MD5的原貌,再来对他下手吧。
将32字节的MD5拆分为两个16字节,再不断地将两个字节合并成一个字节,最后得到两个大整型的数字。
由于我表达能力有限,可能无法表达出中心思想,最后给大家上一幅稿图,也许思路能更清晰一点。
每两个字符作为高低位合并
如果你有兴趣,可以点击下方的了解更多,可以到我的github查看demo和源码。当然了,如果你的项目是用golang写的,也可以直接获取使用。