首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >BaseN (例如,Base64)编码的形式规范在哪里?

BaseN (例如,Base64)编码的形式规范在哪里?
EN

Stack Overflow用户
提问于 2022-04-20 03:00:09
回答 1查看 118关注 0票数 2

TL;DR:这些编码是否有正式规范(如ISO或其他国家标准/国际标准),还是主要取决于开发人员作为一种通用技术?

当看到这句话(来自这篇PhD论文)时,我开始从这个兔子洞里钻出来:

也就是说,将c解释为某一数字的基-256编码,从最小significant到大多数significant的数字(即一个小端点数),我们以基数-32打印数字,从大多数significant到最小significant的数字。(注意,外部和表示字符串连接,而内部和表示整数相加。)这组数字是 digits32 =“0123456789abc digits32” 即,除字母e、o、u和t外的字母数字。这是为了减少散列表示包含对某些用户可能有冒犯性的字符序列的可能性(数字[11]的字母数字表示的已知可能性)。

由于在主题方面没有太多经验,我按照以下顺序开始学习基础知识:

所有这些都没有提到Base256,但到目前为止,我将这样总结BaseN编码是什么(用非常过度简化和草率的方式):

代码语言:javascript
运行
复制
Encoding  schemes  to  represent binary data in 
textual  format based  on a  set of  characters
(e.g., chosen arbitrarily by developer, defined
by a standard/specification), where the size of
the set forms the base of the encoding scheme 
(e.g., Base64 - 64 characters).

选择使用“任意”一词是因为RFC4648的Base32定义不同于论文中使用的Base32 (也就是说,字符集显然是这样的)。

至于Base256,论文也不再提它了,当我搜索"Base256“、"base-256”、“Bas-256”等时,我只找到了实现,但没有找到任何正式的规范。它们在名称上似乎也很相似(我在上面使用“任意”一词的另一个原因):

  • base256 256-编码:"Base256编码,a.k.a. latin1编码,在JavaScript中可能是最节省内存的编码。“ 无法找到多少关于"latin1 Base256编码“的信息,但我认为该项目中的Base256实现使用了Latin1字符集作为基础。
  • 基-256:“像gnu-tar那样对base256编码进行编码和解码(支持范围为-9007199254740991到9007199254740991)。” 查找手册“档案格式的GNU扩展”一节,其中相关段落指出(强调我的): 对于包含超出基本格式范围的数字或时间戳的字段, GNU使用基-256表示,而不是ASCII八进制数字。如果前导字节为0xff (255),则字段的所有字节(包括前导字节)都按大端顺序连接起来,其结果是一个负数,表示为2的补码形式。如果前导字节为0x80 (128),则字段的非前导字节按大端顺序连接,其结果是一个以二进制形式表示的正数。除了0xff、0x80和ASCII八进制数字以外的前导字节也保留给以后使用,基本格式范围内的值的基-256表示形式也是如此。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-20 03:31:44

在寻找正式规范时,RFCs、ISO或IEEE标准通常都是您想要的。基本N编码的规范是RFC4648.

也就是说,基-256编码与你所链接的基编码完全不同。

基-16到基-64是设计用来编码二进制数据时,我们只有一个有限的字符集可用。引用RFC4648:

在许多情况下,数据的基编码用于在环境中存储或传输数据,这些环境可能出于遗留原因,仅限于used 1数据。基编码也可以用于没有遗留限制的新应用程序中,这仅仅是因为它可以使用文本编辑器操作对象。

除了在RFC中描述的那些编码之外,没有基本-N编码,因为出于实际的原因,这并不重要。我们可以在给定的环境中使用每个允许的字符来稍微压缩更多的数据,但是我们失去了大量的可移植性,并在更新后冒着代码中断的风险。

然而,基-256编码通常用于存储代码点。一个字节已经可以容纳256个不同的值,因此在某种程度上,二进制数据已经存储在base-256中。

代码是我们通常认为的角色。例如,Unicode字符是单个代码点。然而,我们遇到的问题是,我们不能只将代码点存储为- is。通常,我们可以将任何代码点放入4个字节,但是以这种方式存储它们的效率很低,因为大多数语言每个字符都不需要太多的空间。通常,base-256编码是将一个编码点列表编码为尽可能少字节的方法。

UTF-8通常是编码代码点的最流行方法,因为它为任何值提供了一个很好的解决方案,并且允许我们快速区分字符,不管我们从哪里开始阅读。以下是RFC3629对其工作方式的粗略总结。

Char. number range | UTF-8 octet sequence (hexadecimal) | (binary) --------------------+--------------------------------------------- 0000 0000-0000 007F | 0xxxxxxx 0000 0080-0000 07FF | 110xxxxx 10xxxxxx 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

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

https://stackoverflow.com/questions/71933607

复制
相关文章

相似问题

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