首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Base64转换小数

Base64转换小数
EN

Stack Overflow用户
提问于 2017-03-10 01:35:45
回答 4查看 2.4K关注 0票数 1

我一直在读有关base64转换的文章,据我所知,原始数据的编码版本将是原始大小的133%。

然后,我读到了YouTube是如何像FJZQSHn7fc一样为他们的视频提供唯一标识符的,原因是:一个11个字符的base64字符串可以映射到一个巨大的数字。

等等,假设一个巨大的数字包含20个字符,那么base64编码的字符串不是这个大小的133%,而不是更短吗?

我很困惑。是否存在不同类型的base64转换(字符串到base64,十进制到base64),一次导致较大的结果,另一种导致较小的结果字符串?

EN

回答 4

Stack Overflow用户

发布于 2017-03-10 01:42:24

基64中的每个字符可以编码6比特的数据。因此,11个字符可以编码6x11 = 66位的数据。

代码语言:javascript
复制
2^66 = 73786976294838206464

在可预见的未来,73786976294838206464 (大约7.4x10^19或74万亿)个可能的标识符足以区分独特的YouTube视频。

YouTube不太可能使用这些长度为11的字符串作为较小对象的编码。您可以使用base64 (毕竟只是一个64进制的数字),而不必将其视为其他编码,就像您可以使用字节(具有8位的二进制数字)而不必将这些字节视为ascii字符的编码一样。标识符方案的唯一重要问题是是否有足够的标识符可供使用。在这种情况下,显然是有的。

票数 1
EN

Stack Overflow用户

发布于 2017-03-16 01:29:37

可以这样想:您有一个64位的数字(例如,在Java语言中称为long )。

现在,您可以通过不同的方式打印该数字:

  • 作为二进制数(基数2),打印64 '0‘或’1‘
  • 作为十进制数(基数10),打印最多20个十进制数字
  • 作为十六进制数(基数16),打印16个十六进制数字
  • 作为基数64的数字,打印该基数的11个“数字”。您可以使用任何图形符号作为数字。
  • ...到目前为止,你知道还有更多的可能性--

它们似乎使用与base64编码中使用的相同的64进制数字,即大小写字母、普通数字和两个额外字符。每个字符代表一个6位值。所以你得到66位,根据使用的算法,前导或尾随的2位被截断,以得到一个很好的值。

票数 1
EN

Stack Overflow用户

发布于 2017-03-16 05:52:50

你把正在比较的东西弄糊涂了。有两个语句,两者都比较不同的东西:

  1. "base64编码比原始大小大133%“
  2. ”一个11个字符的base64字符串可以编码一个巨大的数字“

1的情况下,他们通常是指使用8位字符的ASCII码编码的字符串,并将其与以base64编码的相同字符串进行比较。这是133%的增长,因为在base64中,你不能在每个字节中使用所有255位组合。

2的情况下,他们使用数字标识符进行比较,然后将其编码为base64或base10。在这种情况下,base64比base10短得多。

您还可以认为(1)情况是将base256与base64进行比较,而(2)情况是将base10与base64进行比较。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42701912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档