2017-03-09 111 views
1

我一直在阅读关于base64转换,我的理解是原始数据的编码版本将是原始大小的133%。Base64转换小数

然后,我在阅读有关YouTube如何能够为其视频指定唯一标识码的信息,如FJZQSHn7fc,原因是:11个字符的base64字符串可以映射到一个庞大的数字。

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

我很困惑。是否有不同类型的base64转换(字符串到base64与小数到base64),一旦导致更大,而另一个在较小的结果字符串?

回答

1

基数64中的每个字符可以对6位数据进行编码。因此11个字符可以编码6x11 = 66位的数据。

2^66 = 73786976294838206464 

73786976294838206464(约7.4×10^19或74百万的三次方)可能标识符是绰绰有余区分独特的YouTube视频可预见的未来更多。

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

+0

这与base64编码有何不同?他们是完全不同的概念吗? – anemaria20

1

想想这样:你有一个64位数字(例如在Java中称为long)。

现在,可以打印该号码以不同的方式:

  • 为二进制数(基数为2),打印64 '0' 或 '1'
  • 作为十进制数(底为10) ,最多打印20个十进制数字
  • 作为十六进制数字(基数16),打印16个十六进制数字
  • 作为基数64中的数字,在该基数中打印11个“数字”。您可以使用任何图形符号作为数字。
  • ...你现在有很多可能性明白...

好像它们使用相同的base64号码作为在base64编码所使用的那些,也就是大写和小写字母,普通数字和2个额外的字符。每个字符代表一个6位值。所以你得到了66位,并且根据所使用的算法,前导或尾随2位被切断以获得很好的返回值。

0

您在混淆正在比较的事物。 有2条语句,两者比较不同的东西:

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

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

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

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