專利名稱:將二進(jìn)制數(shù)據(jù)序列轉(zhuǎn)換成可打印字符的改進(jìn)的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種將二進(jìn)制數(shù)據(jù)序列轉(zhuǎn)換成可打印字符的方法和系統(tǒng),更具體地說,涉及一種將一個(gè)八位(8比特)數(shù)據(jù)流轉(zhuǎn)換成ASCII字符的改進(jìn)的方法和系統(tǒng)。
背景技術(shù):
在許多應(yīng)用領(lǐng)域,文件通常用它們的“自然”格式表示,如八位字符或二進(jìn)制數(shù)據(jù)。這樣的數(shù)據(jù)可能不能在某些傳輸規(guī)約上傳輸,并且可能不得不轉(zhuǎn)換成一個(gè)可以接收的傳輸格式,即ASCII格式。
將一個(gè)八位數(shù)據(jù)序列轉(zhuǎn)換成可打印字符通常用于e-mail、e-mail附件、傳到CGI服務(wù)器的郵件、Cookie數(shù)據(jù)和不適合二進(jìn)制數(shù)據(jù)應(yīng)用和傳輸?shù)膽?yīng)用場合。
將這樣一個(gè)八位數(shù)據(jù)轉(zhuǎn)換成可打印字符的最常用的方法是BASE64,它采用二進(jìn)制序列的3-in-4表示方式,即它通過將三個(gè)連續(xù)的字節(jié)組分成每6比特為一組的四個(gè)組,來編碼ASCII字節(jié)序列。
我們知道,在將八位二進(jìn)制轉(zhuǎn)換成ASCII碼的編碼中,規(guī)約的效率與通信信道的字符干擾概率相矛盾。也就是說,規(guī)約的效率隨著表示中所用的字符數(shù)的增加而增加,而另一方面,所用的字符越多,可能出現(xiàn)在通信信道上的干擾機(jī)會(huì)就越大。
因?yàn)锽ASE64使用了64個(gè)可打印字符的集合來將八位數(shù)據(jù)轉(zhuǎn)換成可打印字符,即小寫字母a到z,大寫字母A到Z,阿拉伯?dāng)?shù)字0到9,“+”和“/”,所以它減小了所用字符與通信信道間干擾的機(jī)會(huì)。
然而,在BASE64編碼方法中,著名的二進(jìn)制序列的3-in-4表示方式使得很難單獨(dú)地一個(gè)字節(jié)一個(gè)字節(jié)地處理數(shù)據(jù)序列,并且導(dǎo)致輸出數(shù)據(jù)量增加33%,這種增加與輸入數(shù)據(jù)中出現(xiàn)的字符無關(guān)。這導(dǎo)致要處理數(shù)據(jù)量的增加,因此所需的處理時(shí)間也增加。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種將一個(gè)八位的數(shù)據(jù)流轉(zhuǎn)換成ASCII字符的改進(jìn)的方法和系統(tǒng)。
根據(jù)本發(fā)明的一個(gè)方面的方法包括下列步驟一個(gè)字節(jié)一個(gè)字節(jié)地輸入所述的由八位字節(jié)組成的數(shù)據(jù)序列;一字節(jié)一字節(jié)將每個(gè)輸入的字節(jié)分成2比特的前綴和6比特的部分;從一組特殊的可打印字符中用一個(gè)特殊的可打印字符表示每一個(gè)輸入的字節(jié);依照預(yù)定方式,,一字節(jié)一字節(jié)將每個(gè)字節(jié)的6比特部分轉(zhuǎn)換成一組可打印字符中的一個(gè)可打印字符;輸出所述特殊的可打印字符和可打印字符。
根據(jù)本發(fā)明的另一個(gè)方面的方法包括下列步驟一個(gè)字節(jié)一個(gè)字節(jié)地輸入所述的由八位字節(jié)組成的數(shù)據(jù)序列;用一組特殊可打印字符中的一個(gè)特殊可打印字符表示一組連續(xù)輸入字節(jié)中的每一個(gè)字節(jié);依照預(yù)定的方式,一個(gè)字節(jié)一個(gè)字節(jié)地將所述組中每個(gè)字節(jié)的6比特部分轉(zhuǎn)換成一組可打印字符中的一個(gè)可打印字符;輸出所述可打印字符。
根據(jù)本發(fā)明的一個(gè)方面的系統(tǒng)包括輸入所述的由八位字節(jié)組成的數(shù)據(jù)序列的裝置;將輸入的字節(jié)分成兩部分的裝置;生成一個(gè)可打印的前綴表示的裝置;生成一個(gè)可打印字符和生成一個(gè)ASCII字符的裝置;其中所述的分離裝置一個(gè)字節(jié)一個(gè)字節(jié)地將輸入的每個(gè)字節(jié)分成一個(gè)2比特的前綴和6比特的部分;所述的前綴表示生成裝置對(duì)每個(gè)輸入的字節(jié)生成一個(gè)前綴表示;所述的可打印字符生成裝置基于預(yù)定方式對(duì)每個(gè)所述的6比特部分生成一個(gè)可打印字符,該可打印字符來自一組可打印字符,所產(chǎn)生的前綴表示和可打印字符在所述的ASCII字符生成裝置中形成一個(gè)ASCII字符表示以便輸出。
根據(jù)本發(fā)明的另一方面的系統(tǒng)包括輸入所述的由八位字節(jié)組成的數(shù)據(jù)序列的裝置;將輸入字節(jié)分成兩部分的裝置;生成一個(gè)可打印的前綴表示的裝置;生成一個(gè)可打印字符的裝置和生成一個(gè)ASCII字符的裝置;其中所述的分離裝置自適應(yīng)地一個(gè)字節(jié)一個(gè)字節(jié)地將輸入的每個(gè)字節(jié)分成一個(gè)2比特的前綴和6比特的部分;所述的前綴表示生成裝置對(duì)一組連續(xù)輸入的字節(jié)中的每個(gè)字節(jié)生成一個(gè)特殊的前綴表示;所述的可打印字符生成裝置基于預(yù)定方式,對(duì)所述的連續(xù)輸入字節(jié)組中的每一個(gè)生成一個(gè)可打印字符,該字符來自一組字符;所述可打印字符通過ASCII字符生成裝置作為ASCII字符輸出。
圖1是顯示本發(fā)明方法的流程圖。
圖2是顯示本發(fā)明方法的另一種方式的流程圖。
圖3是顯示一個(gè)本發(fā)明系統(tǒng)的實(shí)施例的示意方框圖。
圖4是顯示一個(gè)本發(fā)明改進(jìn)系統(tǒng)的實(shí)施例的示意方框圖。
具體實(shí)施例方式
本發(fā)明的發(fā)明人注意到一個(gè)八位的字節(jié)最多有256種變化,它可以分成4組,每組由64種變化組成,并且每組可以由一個(gè)特殊的字符表示,另外,任何一個(gè)字節(jié)中的前兩個(gè)比特一定是下列四種之一00,01,10,11。因此,如果將一個(gè)字節(jié)分成兩部分,也就是,一個(gè)部分由前兩個(gè)比特組成,一個(gè)部分由剩下的6比特組成,則這個(gè)字節(jié)可以由一個(gè)2比特的前綴(00,01,10,11)和一個(gè)6比特的部分組成。
由于一個(gè)6比特的字節(jié)能用BASE64編碼方式轉(zhuǎn)換成一個(gè)可打印字符,如果將一個(gè)特殊的可打印字符賦予前綴,則任何一個(gè)八位字節(jié)可以由一個(gè)特殊的可打印字符和一個(gè)BASE64字符表示。本發(fā)明的編碼方案采用BASE64字符集和四個(gè)特殊的字符表示一個(gè)八位字節(jié),這些特殊的字符可以是任意的可打印字符,他們對(duì)應(yīng)于標(biāo)準(zhǔn)的128個(gè)ASCII字符集中的值為32到126的字符,除了那些已經(jīng)被BASE64字符集用了的字符。這些特殊字符可以包括,例如@,#,$,%,&,*,(,),^,!,-,?,<,>,”,’,-,,;,[,],{,},\,|等。
因?yàn)槊總€(gè)八位的字節(jié)可以由一個(gè)前綴和一個(gè)6比特的部分組成,按照本發(fā)明的方法,可以一個(gè)字節(jié)一個(gè)字節(jié)地處理輸入數(shù)據(jù),而不象BASE64中所用的那樣,每三字節(jié)一組地處理輸入數(shù)據(jù)。
因?yàn)榘宋蛔止?jié)有256種變化。這256種變化被映射成4組BASE64字符集之一中的64個(gè)字符。每組從字符@,#,$,%,&,*,(,),^,!,-,?,<,>,”,’,-,,;,[,],{,},\,|中選擇4個(gè)特殊字符之一表示。例如,00=@,01=#,10=$,11=%,因此一個(gè)字節(jié)可以轉(zhuǎn)換成一個(gè)由例如@,#,$,%四個(gè)字符之一表示的前綴和一個(gè)BASE64字符。
字節(jié)和可打印字符(特殊字符和BASE64字符)之間的映射關(guān)系可以設(shè)置如下映射例1 或者映射可以由‘前綴’+BASE64表示。也就是說,對(duì)于任意一個(gè)八位的字節(jié),不管這個(gè)字節(jié)是0-63還是192-255,都可以表示成一個(gè)2比特的前綴和對(duì)應(yīng)于十進(jìn)制數(shù)的0-63的6比特。對(duì)于2比特前綴,@表示00,#表示01,$表示10,%表示11。
然而,重要的是由于特殊字符選自字符組@,#,$,%,&,*,(,),^,!,,?,<,>,”,’,-,,;,[,],{,},\,|,也可以使用其它的映射,如映射例2
在此%表示00,$表示01,#表示10,@表示11。
實(shí)際上,除了@,#,$,%以外的其他特殊字符也可以用于分別表示00,01,10,11。
因?yàn)橹挥?個(gè)特殊的字符,在一個(gè)二進(jìn)制數(shù)據(jù)流中的兩個(gè)連續(xù)字節(jié)的前綴可能相同,換句話說,它們可能代表同一組BASE64字符集,只有當(dāng)它與緊接著的前一字節(jié)不在同一個(gè)組(有相同的前綴)時(shí),前綴才被使用或輸出。
現(xiàn)在,通過例子說明本發(fā)明。
圖1是一個(gè)顯示本發(fā)明方法的流程圖。首先,按照變化和如映射例1將一個(gè)輸入字節(jié)歸類到四組之一(步驟102)。
然后,根據(jù)映射例1確定編碼的類別,即該字節(jié)的前綴表示(步驟103)。
而后,將該前綴與前一字節(jié)的前綴進(jìn)行比較(步驟104a)。如果它與前一字節(jié)的前綴代表同樣的組,或換句話說,如果它與前一字節(jié)的前綴由同樣的特殊字符表示,該前綴被忽略(步驟104b)。
同時(shí),字節(jié)被分成一個(gè)2比特前綴和一個(gè)6比特部分(步驟104)。根據(jù)常規(guī)的匹配方式,將6比特部分轉(zhuǎn)換成BASE64字符(步驟105)。也就是說,在一個(gè)BASE64字符集中找出一個(gè)與6比特部分相匹配的BASE64字符來完成匹配過程。例如,一個(gè)6比特部分為011001,它表示BASE64字符集中的大寫字母Z。
最后,將BASE64字符與前綴(例如Z)一同輸出以便例如傳輸(步驟106),如果前一個(gè)字節(jié)的前綴不是代表Z組的話。然而,如果該前綴與前一個(gè)字節(jié)的前綴相同,則僅輸出BASE64字符而忽略前綴。
如圖2所示,還可以不先將字節(jié)分組,而是將它直接分成一個(gè)2比特前綴和一個(gè)6比特的部分(步驟202)。而后,按照前綴搜索相應(yīng)的特殊字符(步驟203a)。如果前綴是00,則用@表示,如果前綴是01,則用#表示,如果前綴是10,則用$表示,如果前綴是11,則用%表示。
然后,將所表示的前綴與前一字節(jié)的前綴進(jìn)行比較(步驟204),如果它與前面的字節(jié)表示同樣的組,或者換句話說,如果它用與緊接著的前一個(gè)字節(jié)的前綴一樣的特殊字符表示,則省略所表示的前綴(步驟205)。
如果這個(gè)被表示的前綴代表不同的組或者與前面字節(jié)前綴的表示不同,那么這個(gè)前綴即將被輸出。
同時(shí),按照常規(guī)的匹配方式,將6比特部分轉(zhuǎn)換成一個(gè)BASE64字符(步驟203b),即在BASE64字符集中找出一個(gè)與該6比特部分相匹配的BASE64字符進(jìn)行匹配。例如,如果6比特部分為011001,它由BASE64字符集中的‘Z’表示。
最后,該BASE64字符與所表示的前綴(例如Z)一起輸出,如果前一字節(jié)的前綴不是代表Z組的話(步驟206)。然而,如果所表示的前綴與前一字節(jié)的前綴一樣,則僅僅輸出BASE64字符,而前綴被省略。
對(duì)于一個(gè)十六進(jìn)制的數(shù)據(jù)序列0x14fb9c03d9,它的八位二進(jìn)制表示為00010100 11111011 10011100 00000011 11011001。
根據(jù)本發(fā)明,在這個(gè)數(shù)據(jù)的二進(jìn)制-文本轉(zhuǎn)換中,首先取第一個(gè)字節(jié),并將其分成一個(gè)前綴00和一個(gè)6比特部分010100,如果采用映射例1,前綴00用一個(gè)特殊字符@表示。
然后將該前綴@與緊前一字節(jié)的前綴進(jìn)行比較,在這種情況下,由于在這個(gè)數(shù)據(jù)流中,00010100是第一個(gè)字節(jié),前綴被保存以便輸出。
這個(gè)6比特部分010100被轉(zhuǎn)換成一個(gè)BASE64字符T,然后以@T的形式與前綴@一起輸出。
然后處理第二字節(jié)11111011。它被分成一個(gè)前綴11和一個(gè)6比特部分111011,前綴11對(duì)應(yīng)一個(gè)特殊字符%,將它與前面一個(gè)字節(jié)00010100的前綴比較,也就是與表示00的特殊字符@進(jìn)行比較,因?yàn)閮蓚€(gè)前綴不在同一組,那么前綴%將被輸出以便傳輸。
6比特部分111011被轉(zhuǎn)換成一個(gè)BASE64字符7,然后以%7的形式與前綴%一起輸出。
類似地處理第三字節(jié)10011100,將它分成一個(gè)前綴10和一個(gè)6比特部分011100,前綴10對(duì)應(yīng)一個(gè)特殊字符$,將它與其前面的字節(jié)11111011的前綴比較,也就是與表示11的特殊字符%進(jìn)行比較,因?yàn)閮蓚€(gè)前綴不在同一組,那么前綴$將被輸出以便傳輸。
6比特部分011100被轉(zhuǎn)換成一個(gè)BASE64字符c,然后以$c的形式與前綴$一起輸出。
也類似地處理第四字節(jié)00000011,將它分成一個(gè)前綴00和一個(gè)6比特部分000011,前綴00對(duì)應(yīng)一個(gè)特殊字符@,6比特部分000011被轉(zhuǎn)換成一個(gè)BASE64字符D。
盡管前綴@與第一字節(jié)的前綴相同,但它與緊前面一個(gè)字節(jié),即10011100的前綴不同,前綴@與表示000011的BASE64字符一起輸出。
類似地,第五字節(jié)11011001也被分成一個(gè)前綴11和一個(gè)6比特部分011001,前綴11用字符%表示,6比特部分011001被轉(zhuǎn)換成字母Z。
盡管前綴%與第二字節(jié)的前綴在同一組,但是它與緊前面一個(gè)字節(jié),即00000011不在同一組,前綴%與表示011001的字母Z一起輸出。
編碼過程一個(gè)字節(jié)一個(gè)字節(jié)地進(jìn)行。
在解碼過程中,過程相反地進(jìn)行。也就是用映射關(guān)系和BASE64方式,將可打印ASCII字符轉(zhuǎn)換回八位二進(jìn)制數(shù)據(jù),例如,@T首先被分成@和T,@被轉(zhuǎn)換成00,T被轉(zhuǎn)換成010100,因此,@T被轉(zhuǎn)換成00010100。
類似地,%7,$c,@D,%Z被分別地轉(zhuǎn)換回11111011,10011100,00000011和11011001,表1和表2顯示了將數(shù)據(jù)(十六進(jìn)制)0x14fb9c03d9轉(zhuǎn)換成ASCII字符的結(jié)果。
表1
表2
在編碼過程中,不在BASE64字符集中的那些字符,如回車和其它空白字符,可能指示一個(gè)傳輸錯(cuò)誤。
在解碼過程中,如果要被解碼的字符與BASE64字符集中的字符不匹配或者是在BASE64字符集以外,這些字符被忽略或者不被解碼。在BASE64字符集和特殊前綴字符表中沒有的回車或其它字符也被忽略。
現(xiàn)在參考圖3,圖3是體現(xiàn)本發(fā)明個(gè)系統(tǒng)的一個(gè)實(shí)施例的方框示意圖。
根據(jù)本發(fā)明的系統(tǒng)包括一個(gè)緩沖器(301),一個(gè)字節(jié)分離器(302)與上述緩沖器相連,一個(gè)前綴產(chǎn)生器(303)和一個(gè)BASE64產(chǎn)生器(304)分別與所述字節(jié)分離器相連,一個(gè)ASCII碼產(chǎn)生器(305)分別與上述前綴產(chǎn)生器(303)和BASE64產(chǎn)生器(304)的輸出相連。
首先,二進(jìn)制數(shù)據(jù)流被輸入到一個(gè)字節(jié)分離器或一個(gè)實(shí)現(xiàn)相似功能的機(jī)構(gòu)。如果數(shù)據(jù)是十六進(jìn)制的,必須將它轉(zhuǎn)換成八位字節(jié)。利用分離機(jī)構(gòu)將這個(gè)字節(jié)分成兩部分,即2比特前綴和剩余的6比特部分。
該2比特前綴與預(yù)先確定的四個(gè)特殊可打印字符之一相匹配,并且用一個(gè)特殊的可打印字符表示,這在一個(gè)完成這樣功能的裝置,如前綴產(chǎn)生器中。
按照常規(guī)的BASE64方式,6比特部分被轉(zhuǎn)換成一個(gè)BASE64字符,這在一個(gè)完成這樣功能的裝置,如BASE64產(chǎn)生器中進(jìn)行。
然后,在一個(gè)產(chǎn)生ASCII碼字符裝置,如ASCII產(chǎn)生器中將所產(chǎn)生的前綴與緊前面一個(gè)字節(jié)的前綴進(jìn)行比較,以決定當(dāng)前字節(jié)和緊前面一個(gè)字節(jié)是否屬于同一個(gè)組。如果它們屬于同一組,也就是所產(chǎn)生的前綴與緊前面一個(gè)字節(jié)的前綴相同,則只有BASE64字符作為ASCII字符產(chǎn)生并被輸出。如果不同,所產(chǎn)生的前綴和BASE64字符以ASCII字符的形式輸出以便傳輸或進(jìn)一步使用。
應(yīng)該注意,本領(lǐng)域的技術(shù)人員可以以各種方式或方法實(shí)現(xiàn)本發(fā)明,而不僅僅是上面所描述的方式或方法。例如,某些功能可不僅通過一個(gè)獨(dú)立的裝置,而是通過,例如兩種裝置的組合實(shí)現(xiàn)。
圖4是一個(gè)顯示本發(fā)明系統(tǒng)的另一實(shí)施例的示意方框圖。在圖4中,字節(jié)分離裝置完成自適應(yīng)“動(dòng)態(tài)”映射而不是“靜態(tài)”映射,“靜態(tài)”映射中八位字節(jié)和可打印字符之間的映射如上所述是預(yù)先定好的。
在圖3所示的實(shí)施例中,字節(jié)分離器進(jìn)行所謂的“靜態(tài)”映射,因?yàn)樵诎宋恢谱止?jié)和4個(gè)BASE64組之間的映射是預(yù)先定好的或固定的。然而,映射也可以基于字節(jié)值出現(xiàn)的頻率來實(shí)現(xiàn),例如,在一個(gè)數(shù)據(jù)流中的字節(jié)可以如下分組映射例3(動(dòng)態(tài)映射1)
在這種情況下,數(shù)據(jù)流中的頭64個(gè)字節(jié)由@表示,而后續(xù)的64字節(jié)由#表示,等等,也就是說,以字節(jié)傳輸?shù)捻樞蚍纸M,而不管它們的值。字節(jié)和BASE64字符之間的映射關(guān)系可以用如下的一個(gè)映射表建立
具有同樣值的字節(jié)將被映射成一個(gè)字符,例如,由于字節(jié)2和字節(jié)5有相同的值,它們被映射成相同的符號(hào),例如大寫字母B。
下面是一個(gè)“動(dòng)態(tài)”映射的例子。對(duì)于一個(gè)輸入串“I’m glad to seeyou....”,如果使用映射例3的動(dòng)態(tài)映射方式,則轉(zhuǎn)換將是
上面描述的用“靜態(tài)”映射的輸出是J@n#t@g#nshk@g#0v@g#z...
對(duì)于“動(dòng)態(tài)“映射,因?yàn)榈谝粋€(gè)64字節(jié)是在@+BASE64這組之中,@被省略并且輸出是ABCDEFGHDIJDK...
在這種情況下,“動(dòng)態(tài)”的映射表是
在某些應(yīng)用中,如e_mail文本,它所用的字節(jié)少于64個(gè),這時(shí)ASCII映射的“動(dòng)態(tài)”排列相對(duì)于“靜態(tài)”排列是有其優(yōu)越性的。因此,在組之間將沒有轉(zhuǎn)換,輸出是較小的。
以上以舉例的方式描述了本發(fā)明。重要的是本發(fā)明不限于所描述的例子,本領(lǐng)域的技術(shù)人員在不脫離本發(fā)明精神的情況下,可以對(duì)其進(jìn)行各種修改。
權(quán)利要求
1.一種將一個(gè)八位字節(jié)數(shù)據(jù)序列轉(zhuǎn)換成可打印字符的方法包括下列步驟一個(gè)字節(jié)一個(gè)字節(jié)地輸入由八位字節(jié)組成的所述八位字節(jié)數(shù)據(jù)序列;一個(gè)字節(jié)一個(gè)字節(jié)地將每個(gè)輸入的字節(jié)分成一個(gè)2比特前綴和一個(gè)6比特部分;用一組特殊可打印字符中的一個(gè)特殊可打印字符來表示每個(gè)輸入的字節(jié);按照一個(gè)預(yù)定的方式,一個(gè)字節(jié)一個(gè)字節(jié)地將每個(gè)字節(jié)的6比特部分轉(zhuǎn)換成一組可打印字符中的一個(gè)可打印字符;輸出所述的特殊可打印字符和所述可打印字符。
2.根據(jù)權(quán)利要求1的方法,其中所述的特殊可打印字符組由4個(gè)特殊可打印字符組成。
3.根據(jù)權(quán)利要求2的方法,其中所述特殊可打印字符是從一組由#,$,%,&,*,(,),^,!,-,?,<,>,”,’,-,,;,[,],{,},\,|組成的字符中選擇。
4.根據(jù)權(quán)利要求3的方法,其中所述的特殊可打印字符是@,#,$,%。
5.根據(jù)權(quán)利要求1的方法,其中所述可打印字符組包括A,B,C,D,E,F(xiàn),G,H,I,J,K,L,M,NO,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,I,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9,+,/,它們分別表示十進(jìn)制數(shù)0-63。
6.根據(jù)權(quán)利要求1和5的方法,其中所述的預(yù)定方式是BASE64。
7.根據(jù)權(quán)利要求1的方法,其中所述用一個(gè)特殊可打印字符表示所述字節(jié),是按照字節(jié)變量和所述特殊字符之間的一個(gè)預(yù)定映射方式來實(shí)現(xiàn)的。
8.根據(jù)權(quán)利要求7的方法,其中所述字節(jié)變量被分類成四組,每組有64個(gè)變量。
9.根據(jù)權(quán)利要求1的方法,其中所述用一個(gè)特殊可打印字符表示所述字節(jié)是通過用一個(gè)特殊可打印字符來表示所述字節(jié)前綴來實(shí)現(xiàn)。
10.根據(jù)權(quán)利要求1的方法進(jìn)一步包括這一步驟將所述的特殊可打印字符與所述字節(jié)緊前面的一個(gè)字節(jié)的特殊可打印字符表示進(jìn)行比較。
11.根據(jù)權(quán)利要求1和10的方法,其中如果所述特殊可打印字符與緊前面的一個(gè)字節(jié)表示同一組,這一字符被省略。
12.一種將一個(gè)八位字節(jié)數(shù)據(jù)序列轉(zhuǎn)換成可打印字符的系統(tǒng)包括輸入所述由八位字節(jié)組成的數(shù)據(jù)序列的裝置;將輸入的字節(jié)分成兩部分的裝置;生成一個(gè)可打印的前綴表示的裝置;生成一個(gè)可打印字符的裝置;和生成一個(gè)ASCII字符的裝置,其中所述分離裝置一個(gè)字節(jié)一個(gè)字節(jié)地將輸入的每個(gè)字節(jié)分離成一個(gè)2比特前綴和一個(gè)6比特部分;所述前綴表示生成裝置對(duì)每個(gè)輸入的字節(jié)生成一個(gè)前綴表示;所述可打印字符生成裝置對(duì)每個(gè)所述6比特部分,基于預(yù)定方式,從一組可打印字符中生成一個(gè)可打印字符,產(chǎn)生的前綴表示和可打印字符在所述ASCII字符生成裝置中進(jìn)行組合形成一個(gè)ASCII字符表示以供輸出。
13.根據(jù)權(quán)利要求12的系統(tǒng),其中所述2比特前綴有4種變化,所述前綴表示是從一組由#,$,%,&,*,(,),^,!,-,?,<,>,”,’,-,,;,[,],{,},\,|組成的字符中選擇的一個(gè)特殊可打印字符。
14.根據(jù)權(quán)利要求13的系統(tǒng),其中所述前綴表示是下列字符之一@,#,$,%。
15.根據(jù)權(quán)利要求12的系統(tǒng),其中所述可打印字符組包括A,B,C,D,E,F(xiàn),G,H,I,J,K,L,M,NO,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,I,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9,+,/,它們分別表示十進(jìn)制數(shù)0-63。
16.根據(jù)權(quán)利要求12和15的系統(tǒng),其中所述預(yù)定方式是BASE64。
17.將一個(gè)八位字節(jié)數(shù)據(jù)序列轉(zhuǎn)換成可打印字符的方法包括以下步驟一個(gè)字節(jié)一個(gè)字節(jié)地輸入所述由八位字節(jié)組成的八位字節(jié)數(shù)據(jù)序列;用一組特殊可打印字符中的一個(gè)特殊可打印字符表示一組連續(xù)輸入字節(jié)中的每個(gè)字節(jié);按照預(yù)定順序,一個(gè)字節(jié)一個(gè)字節(jié)地將所述組中的每個(gè)字節(jié)的6比特部分轉(zhuǎn)換成一組可打印字符中的一個(gè)可打印字符;輸出該可打印字符。
18.根據(jù)權(quán)利要求17的方法,其中所述的可打印字符組包括A,B,C,D,E,F(xiàn),G,H,I,J,K,L,M,NO,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,I,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9,+,/。
19.根據(jù)權(quán)利要求17的方法,其中所述預(yù)定順序是A,B,C,D,E,F(xiàn),G,H,I,J,K,L,M,NO,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,I,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9,+,/。
20.根據(jù)權(quán)利要求17的方法,其中所述一個(gè)特殊前綴表示是一個(gè)可打印字符,它選自一組包括#,$,%,&,*,(,),^,!,-,?,<,>,”,’,-,,;,[,],{,},\,|的字符。
21.根據(jù)權(quán)利要求17的方法,其中所述連續(xù)輸入的字節(jié)組由64個(gè)連續(xù)輸入的字節(jié)組成。
22.一種將一個(gè)八位字節(jié)的數(shù)據(jù)序列轉(zhuǎn)換成可打印字符的系統(tǒng)包括一個(gè)字節(jié)一個(gè)字節(jié)地輸入所述由八位字節(jié)組成的數(shù)據(jù)序列的裝置;將輸入的字節(jié)分成兩部分的裝置;生成可打印前綴表示的裝置;生成可打印字符的裝置和生成ASCII字符的裝置,其中所述分離裝置一個(gè)字節(jié)一個(gè)字節(jié)地自適應(yīng)地將輸入的每個(gè)字節(jié)分離成一個(gè)2比特前綴和一個(gè)6比特部分;所述前綴表示生成裝置對(duì)一組連續(xù)輸入字節(jié)中的每個(gè)字節(jié)生成一個(gè)特殊的前綴表示;所述可打印字符生成裝置對(duì)所述連續(xù)輸入字節(jié)組中的每個(gè)字節(jié),基于預(yù)定方式從一組可打印字符中生成一個(gè)可打印字符;可打印字符通過所述ASCII字符生成裝置作為ASCII字符輸出。
23.根據(jù)權(quán)利要求22的系統(tǒng),其中所述的可打印字符組包括A,B,C,D,E,F(xiàn),G,H,I,J,K,L,M,NO,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,I,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9,+,/。
24.根據(jù)權(quán)利要求22的系統(tǒng),其中所述的預(yù)定順序是A,B,C,D,E,F(xiàn),G,H,I,J,K,L,M,NO,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,I,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9,+,/。
25.根據(jù)權(quán)利要求22的系統(tǒng),其中所述的一個(gè)特殊的前綴表示是一個(gè)可打印字符,它選自一組包括#,$,%,&,*,(,),^,!,-,?,<,>,”,’,-,,;,[,],{,},\,|的字符。
26.根據(jù)權(quán)利要求22的系統(tǒng),其中所述連續(xù)輸入的字節(jié)組由64個(gè)連續(xù)輸入字節(jié)組成。
全文摘要
本發(fā)明涉及將一個(gè)八位字節(jié)數(shù)據(jù)流轉(zhuǎn)換成ASCII字符的改進(jìn)的方法和實(shí)現(xiàn)該方法的系統(tǒng)。該方法包括下列步驟一個(gè)字節(jié)一個(gè)字節(jié)地將輸入的每個(gè)字節(jié)分離成一個(gè)2比特的前綴和一個(gè)6比特部分;用一組特殊可打印字符中的一個(gè)表示每個(gè)輸入的字節(jié);按照預(yù)定方式,一字節(jié)一字節(jié)地將每個(gè)字節(jié)的6比特部分轉(zhuǎn)換成一組可打印字符中的一個(gè)可打印字符;并且輸出這個(gè)特殊的可打印字符和可打印字符。
文檔編號(hào)G06F17/22GK1532727SQ0312135
公開日2004年9月29日 申請(qǐng)日期2003年3月26日 優(yōu)先權(quán)日2003年3月26日
發(fā)明者劉昕, 徐宏利, 劉 昕 申請(qǐng)人:摩托羅拉公司