Base64转换小数

2024-10-02 10:27:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我读过base64转换,我理解的是原始数据的编码版本将是原始大小的133%。在

然后,我读到了YouTube是如何在视频中拥有唯一标识符的,比如FJZQSHn7fc,原因是:一个11个字符的base64字符串可以映射到一个巨大的数字。在

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

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


Tags: 字符串版本类型编码原始数据视频youtube原因
3条回答

你搞不清在比较什么东西。 有两种说法,都比较不同的东西:

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

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

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

您还可以将(1)案例视为比较base256与base64,将(2)案例视为比较base10与base64。在

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

2^66 = 73786976294838206464

73786976294838206464(约7.4 x 10^19或74.5万亿)可能的标识符足以在可预见的未来区分独特的YouTube视频。在

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

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

现在,您可以用不同的方法打印该数字:

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

看起来它们使用的base64数字与base64编码中使用的相同,即大小写字母、普通数字和2个额外字符。每个字符代表一个6位值。所以你得到了66位,根据使用的算法,无论是前导还是尾随的2位都被切掉,以得到一个很好的long值。在

相关问题 更多 >

    热门问题