将二进制数据序列转换成可打印字符的改进的方法和系统技术方案

技术编号:2869125 阅读:249 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及将一个八位字节数据流转换成ASCⅡ字符的改进的方法和实现该方法的系统。该方法包括下列步骤:一个字节一个字节地将输入的每个字节分离成一个2比特的前缀和一个6比特部分;用一组特殊可打印字符中的一个表示每个输入的字节;按照预定方式,一字节一字节地将每个字节的6比特部分转换成一组可打印字符中的一个可打印字符;并且输出这个特殊的可打印字符和可打印字符。(*该技术在2023年保护过期,可自由使用*)

【技术实现步骤摘要】

本专利技术涉及一种将二进制数据序列转换成可打印字符的方法和系统,更具体地说,涉及一种将一个八位(8比特)数据流转换成ASCII字符的改进的方法和系统。
技术介绍
在许多应用领域,文件通常用它们的“自然”格式表示,如八位字符或二进制数据。这样的数据可能不能在某些传输规约上传输,并且可能不得不转换成一个可以接收的传输格式,即ASCII格式。将一个八位数据序列转换成可打印字符通常用于e-mail、e-mail附件、传到CGI服务器的邮件、Cookie数据和不适合二进制数据应用和传输的应用场合。将这样一个八位数据转换成可打印字符的最常用的方法是BASE64,它采用二进制序列的3-in-4表示方式,即它通过将三个连续的字节组分成每6比特为一组的四个组,来编码ASCII字节序列。我们知道,在将八位二进制转换成ASCII码的编码中,规约的效率与通信信道的字符干扰概率相矛盾。也就是说,规约的效率随着表示中所用的字符数的增加而增加,而另一方面,所用的字符越多,可能出现在通信信道上的干扰机会就越大。因为BASE64使用了64个可打印字符的集合来将八位数据转换成可打印字符,即小写字母a到z,大写字母A到Z,阿拉伯数字0到9,“+”和“/”,所以它减小了所用字符与通信信道间干扰的机会。然而,在BASE64编码方法中,著名的二进制序列的3-in-4表示方式使得很难单独地一个字节一个字节地处理数据序列,并且导致输出数据量增加33%,这种增加与输入数据中出现的字符无关。这导致要处理数据量的增加,因此所需的处理时间也增加。
技术实现思路
本专利技术的目的在于提供一种将一个八位的数据流转换成ASCII字符的改进的方法和系统。根据本专利技术的一个方面的方法包括下列步骤一个字节一个字节地输入所述的由八位字节组成的数据序列;一字节一字节将每个输入的字节分成2比特的前缀和6比特的部分;从一组特殊的可打印字符中用一个特殊的可打印字符表示每一个输入的字节;依照预定方式,,一字节一字节将每个字节的6比特部分转换成一组可打印字符中的一个可打印字符;输出所述特殊的可打印字符和可打印字符。根据本专利技术的另一个方面的方法包括下列步骤一个字节一个字节地输入所述的由八位字节组成的数据序列;用一组特殊可打印字符中的一个特殊可打印字符表示一组连续输入字节中的每一个字节;依照预定的方式,一个字节一个字节地将所述组中每个字节的6比特部分转换成一组可打印字符中的一个可打印字符;输出所述可打印字符。根据本专利技术的一个方面的系统包括输入所述的由八位字节组成的数据序列的装置;将输入的字节分成两部分的装置;生成一个可打印的前缀表示的装置;生成一个可打印字符和生成一个ASCII字符的装置;其中所述的分离装置一个字节一个字节地将输入的每个字节分成一个2比特的前缀和6比特的部分;所述的前缀表示生成装置对每个输入的字节生成一个前缀表示;所述的可打印字符生成装置基于预定方式对每个所述的6比特部分生成一个可打印字符,该可打印字符来自一组可打印字符,所产生的前缀表示和可打印字符在所述的ASCII字符生成装置中形成一个ASCII字符表示以便输出。根据本专利技术的另一方面的系统包括输入所述的由八位字节组成的数据序列的装置;将输入字节分成两部分的装置;生成一个可打印的前缀表示的装置;生成一个可打印字符的装置和生成一个ASCII字符的装置;其中所述的分离装置自适应地一个字节一个字节地将输入的每个字节分成一个2比特的前缀和6比特的部分;所述的前缀表示生成装置对一组连续输入的字节中的每个字节生成一个特殊的前缀表示;所述的可打印字符生成装置基于预定方式,对所述的连续输入字节组中的每一个生成一个可打印字符,该字符来自一组字符;所述可打印字符通过ASCII字符生成装置作为ASCII字符输出。附图说明图1是显示本专利技术方法的流程图。图2是显示本专利技术方法的另一种方式的流程图。图3是显示一个本专利技术系统的实施例的示意方框图。图4是显示一个本专利技术改进系统的实施例的示意方框图。具体实施例方式本专利技术的专利技术人注意到一个八位的字节最多有256种变化,它可以分成4组,每组由64种变化组成,并且每组可以由一个特殊的字符表示,另外,任何一个字节中的前两个比特一定是下列四种之一00,01,10,11。因此,如果将一个字节分成两部分,也就是,一个部分由前两个比特组成,一个部分由剩下的6比特组成,则这个字节可以由一个2比特的前缀(00,01,10,11)和一个6比特的部分组成。由于一个6比特的字节能用BASE64编码方式转换成一个可打印字符,如果将一个特殊的可打印字符赋予前缀,则任何一个八位字节可以由一个特殊的可打印字符和一个BASE64字符表示。本专利技术的编码方案采用BASE64字符集和四个特殊的字符表示一个八位字节,这些特殊的字符可以是任意的可打印字符,他们对应于标准的128个ASCII字符集中的值为32到126的字符,除了那些已经被BASE64字符集用了的字符。这些特殊字符可以包括,例如@,#,$,%,&,*,(,),^,!,-,?,<,>,”,’,-,,;,,{,},\,|等。因为每个八位的字节可以由一个前缀和一个6比特的部分组成,按照本专利技术的方法,可以一个字节一个字节地处理输入数据,而不象BASE64中所用的那样,每三字节一组地处理输入数据。因为八位字节有256种变化。这256种变化被映射成4组BASE64字符集之一中的64个字符。每组从字符@,#,$,%,&,*,(,),^,!,-,?,<,>,”,’,-,,;,,{,},\,|中选择4个特殊字符之一表示。例如,00=@,01=#,10=$,11=%,因此一个字节可以转换成一个由例如@,#,$,%四个字符之一表示的前缀和一个BASE64字符。字节和可打印字符(特殊字符和BASE64字符)之间的映射关系可以设置如下映射例1 或者映射可以由‘前缀’+BASE64表示。也就是说,对于任意一个八位的字节,不管这个字节是0-63还是192-255,都可以表示成一个2比特的前缀和对应于十进制数的0-63的6比特。对于2比特前缀,@表示00,#表示01,$表示10,%表示11。然而,重要的是由于特殊字符选自字符组@,#,$,%,&,*,(,),^,!,,?,<,>,”,’,-,,;,,{,},\,|,也可以使用其它的映射,如映射例2 在此%表示00,$表示01,#表示10,@表示11。实际上,除了@,#,$,%以外的其他特殊字符也可以用于分别表示00,01,10,11。因为只有4个特殊的字符,在一个二进制数据流中的两个连续字节的前缀可能相同,换句话说,它们可能代表同一组BASE64字符集,只有当它与紧接着的前一字节不在同一个组(有相同的前缀)时,前缀才被使用或输出。现在,通过例子说明本专利技术。图1是一个显示本专利技术方法的流程图。首先,按照变化和如映射例1将一个输入字节归类到四组之一(步骤102)。然后,根据映射例1确定编码的类别,即该字节的前缀表示(步骤103)。而后,将该前缀与前一字节的前缀进行比较(步骤104a)。如果它与前一字节的前缀代表同样的组,或换句话说,如本文档来自技高网...

【技术保护点】
一种将一个八位字节数据序列转换成可打印字符的方法包括下列步骤:    一个字节一个字节地输入由八位字节组成的所述八位字节数据序列;    一个字节一个字节地将每个输入的字节分成一个2比特前缀和一个6比特部分;    用一组特殊可打印字符中的一个特殊可打印字符来表示每个输入的字节;    按照一个预定的方式,一个字节一个字节地将每个字节的6比特部分转换成一组可打印字符中的一个可打印字符;    输出所述的特殊可打印字符和所述可打印字符。

【技术特征摘要】

【专利技术属性】
技术研发人员:刘昕徐宏利
申请(专利权)人:摩托罗拉公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1