在XML文档中的系统之间发送二进制内容的最佳方法是什么
我知道Base64和Hex,真正的区别是什么。我当前正在使用Base64,但为此需要包括一个外部公共库,就像使用HEX一样,我认为我可以创建一个函数。
在XML文档中的系统之间发送二进制内容的最佳方法是什么
我知道Base64和Hex,真正的区别是什么。我当前正在使用Base64,但为此需要包括一个外部公共库,就像使用HEX一样,我认为我可以创建一个函数。
Answers:
您也可以为Base64编写自己的方法...但是我通常建议同时使用外部的,经过测试的库。(这并不意味着它们短缺。)
Base64和十六进制之间的区别实际上只是字节的表示方式。十六进制是“ Base16”的另一种说法。十六进制每个字节占用两个字符-Base64每三个字节占用4个字符,因此它比十六进制效率更高。假设您使用UTF-8编码XML文档,则100K文件将需要200K进行十六进制编码,而在Base64中则需要133K。当然,很可能您根本不关心空间效率-在许多情况下都没有关系。如果确实如此,那么显然在这方面,Base64更好。(有些替代方法更有效,但并不常见。)
我很好奇,在EARTH base64上如何将3个输入字节转换为4个输出字节而仅增加33%的空间(而hex将1个输入字节转换为2个输出字节以实现100%的空间)。为什么要专门输入3个字节?
答案是:
3个字节= 3 x 8位= 24位。
为什么会有这个神奇的“ 24位”数字?好吧,基数64代表数字0到63。它们如何用二进制表示?用000000(0)至111111(63)。
答对了!每个base64字符使用单个输出字节(例如“ Z”等单个字符)代表6位输入数据。
因此,24位(3个完整的8位输入字节)/ 6位(base64字母)= 4个字节的base64。而已!
或者,用另一种方式描述,每个Base64字符(1个字节(8位))编码6位实际数据。而且,如果我们将8bits / 6bits除以,我们将看到33%的增长来自哪里,就像在这篇文章的顶部提到的那样。所以,是的,Base64总是将数据大小增加了33%(加上某些=字符的潜在填充) 在base64输出的末尾添加)。
您可能会想:“为什么在编码时,base128(输入的7位=输出的8位)仅以14%的大小增长?”。答案是,base64是我们能找到的最好的,因为较低的128个ASCII字符并非全部可打印。许多是控制字符,例如NULL等。
显然,有很多方法可以创建其他系统,例如“ base81”等,因为如果您创建自定义编码算法,则可以做任何您想做的事情。但是base64的优点在于,它如何以6位为块对数据进行如此干净的编码,以及如何简单地“读取3个字节并输出4个”来编码,以及“读取4个字节并输出3个”来解码。因此,该编码方案开始流行。
阅读本文后,希望您更加明智。
有趣的更新:说到具有更多字符的其他编码样式...引起我注意的是,Ascii85 aka Base85存在并且效率更高(当编码为Base85时,数据大小增长25%,而对于Base64则为33%):https:// /en.wikipedia.org/wiki/Ascii85
只有两个“真正的区别”:
基数。Base64是base-64,令人惊讶,十六进制是base-16。
编码:base-64将3个源字节编码为4个base-64字符(http://en.wikipedia.org/wiki/Base64#Examples);hex将1个字节编码为2个十六进制字符。
因此,base64比十六进制更紧凑。
其他答案明确了base16和base64之间的效率差异。
基础选择比效率更多。
Base64不仅使用字母和数字。不同的实现使用不同的标点符号来表示填充,并组成64个字符集的最后两个字符。这些字符可以包括加号“ +”和等于“ =”。两者在HTTP查询字符串中都是有问题的。
因此,支持base16而不是base64的一个原因是,可以将base16值直接组成HTTP查询字符串,而无需其他编码。这对您重要吗?
请注意,这是除效率之外的另一个问题。两种天生固有的好坏都没有。它们只是规模上的两个不同点,在这里您会发现在不同情况下或多或少具有吸引力的不同属性。
例如,考虑base32。它的效率比base64低20%,但仍然适合在HTTP查询字符串中使用。其效率低下的大部分原因是不区分大小写,并且避免了人类复制错误中的零“ 0”和一个“ 1”。
因此base32引入了新的关注点;易于人类繁殖。您担心吗?如果不是这样,则可以使用base62之类的东西,它在HTTP查询字符串中仍然很方便,但是区分大小写,并且包含零个“ 0”和“ 1”。
希望我已经澄清了,编码基础的选择只是沿着比例尺滑动,直到在获得对您重要的东西之前获得最佳效率为止。
维基百科上有很多有趣的数字系统。