我一直在读有关base64转换的文章,据我所知,原始数据的编码版本将是原始大小的133%。
然后,我读到了YouTube是如何像FJZQSHn7fc一样为他们的视频提供唯一标识符的,原因是:一个11个字符的base64字符串可以映射到一个巨大的数字。
等等,假设一个巨大的数字包含20个字符,那么base64编码的字符串不是这个大小的133%,而不是更短吗?
我很困惑。是否存在不同类型的base64转换(字符串到base64,十进制到base64),一次导致较大的结果,另一种导致较小的结果字符串?
发布于 2017-03-10 01:42:24
基64中的每个字符可以编码6比特的数据。因此,11个字符可以编码6x11 = 66位的数据。
2^66 = 73786976294838206464在可预见的未来,73786976294838206464 (大约7.4x10^19或74万亿)个可能的标识符足以区分独特的YouTube视频。
YouTube不太可能使用这些长度为11的字符串作为较小对象的编码。您可以使用base64 (毕竟只是一个64进制的数字),而不必将其视为其他编码,就像您可以使用字节(具有8位的二进制数字)而不必将这些字节视为ascii字符的编码一样。标识符方案的唯一重要问题是是否有足够的标识符可供使用。在这种情况下,显然是有的。
发布于 2017-03-16 01:29:37
可以这样想:您有一个64位的数字(例如,在Java语言中称为long )。
现在,您可以通过不同的方式打印该数字:
它们似乎使用与base64编码中使用的相同的64进制数字,即大小写字母、普通数字和两个额外字符。每个字符代表一个6位值。所以你得到66位,根据使用的算法,前导或尾随的2位被截断,以得到一个很好的长值。
发布于 2017-03-16 05:52:50
你把正在比较的东西弄糊涂了。有两个语句,两者都比较不同的东西:
在1的情况下,他们通常是指使用8位字符的ASCII码编码的字符串,并将其与以base64编码的相同字符串进行比较。这是133%的增长,因为在base64中,你不能在每个字节中使用所有255位组合。
在2的情况下,他们使用数字标识符进行比较,然后将其编码为base64或base10。在这种情况下,base64比base10短得多。
您还可以认为(1)情况是将base256与base64进行比较,而(2)情况是将base10与base64进行比较。
https://stackoverflow.com/questions/42701912
复制相似问题