JS Compress and Decompress

<html>
<head>
<title>JavaScript字符串之壓縮與還原</title>
<meta?http-equiv="Content-Type"?content="text/html;?charset=utf-8"?/>
<script?type="text/javascript">
<!--
/**
?*?壓縮
?
*/
function?Compress(strNormalString)?{
????alert(
"壓縮前長度:"?+?strNormalString.length);
????
var?strCompressedString?=?"";

????
var?ht?=?new?Array();
????
for(i?=?0;?i?<?128;?i++)?{
????????ht[i]?
=?i;
????}

????
var?used?=?128;
????
var?intLeftOver?=?0;
????
var?intOutputCode?=?0;
????
var?pcode?=?0;
????
var?ccode?=?0;
????
var?k?=?0;

????
for(var?i=0;?i<strNormalString.length;?i++)?{
????????ccode?
=?strNormalString.charCodeAt(i);
????????k?
=?(pcode?<<?8)?|?ccode;
????????
if(ht[k]?!=?null)?{
????????????pcode?
=?ht[k];
????????}?
else?{
????????????intLeftOver?
+=?12;
????????????intOutputCode?
<<=?12;
????????????intOutputCode?
|=?pcode;
????????????pcode?
=?ccode;
????????????
if(intLeftOver?>=?16)?{
????????????????strCompressedString?
+=?String.fromCharCode(?intOutputCode?>>?(?intLeftOver?-?16?)?);
????????????????intOutputCode?
&=?(Math.pow(2,?(intLeftOver?-?16))?-?1);
????????????????intLeftOver?
-=?16;
????????????}
????????????
if(used?<?4096)?{
????????????????used?
++;
????????????????ht[k]?
=?used?-?1;
????????????}
????????}
????}

????
if(pcode?!=?0)?{
????????intLeftOver?
+=?12;
????????intOutputCode?
<<=?12;
????????intOutputCode?
|=?pcode;
????}

????
if(intLeftOver?>=?16)?{
????????strCompressedString?
+=?String.fromCharCode(?intOutputCode?>>?(?intLeftOver?-?16?)?);
????????intOutputCode?
&=?(Math.pow(2,(intLeftOver?-?16))?-?1);
????????intLeftOver?
-=?16;
????}

????
if(?intLeftOver?>?0)?{
????????intOutputCode?
<<=?(16?-?intLeftOver);
????????strCompressedString?
+=?String.fromCharCode(?intOutputCode?);
????}

????alert(
"壓縮后長度:"?+?strCompressedString.length);
????
return?strCompressedString;
}

/**
?*?解壓縮
?
*/
function?Decompress(strCompressedString)?{
????
var?strNormalString?=?"";
????
var?ht?=?new?Array();

????
for(i?=?0;?i?<?128;?i++)?{
????????ht[i]?
=?String.fromCharCode(i);
????}

????
var?used?=?128;
????
var?intLeftOver?=?0;
????
var?intOutputCode?=?0;
????
var?ccode?=?0;
????
var?pcode?=?0;
????
var?key?=?0;

????
for(var?i=0;?i<strCompressedString.length;?i++)?{
????????intLeftOver?
+=?16;
????????intOutputCode?
<<=?16;
????????intOutputCode?
|=?strCompressedString.charCodeAt(i);

????????
while(1)?{
????????????
if(intLeftOver?>=?12)?{
????????????????ccode?
=?intOutputCode?>>?(intLeftOver?-?12);
????????????????
if(?typeof(?key?=?ht[ccode]?)?!=?"undefined"?)?{
?????????????????????strNormalString?
+=?key;
????????????????????
if(used?>?128)?{
????????????????????????ht[ht.length]?
=?ht[pcode]?+?key.substr(0,?1);
????????????????????}
?????????????????????pcode?
=?ccode;
????????????????}?
else?{
????????????????????key?
=?ht[pcode]?+?ht[pcode].substr(0,?1);
????????????????????strNormalString?
+=?key;
????????????????????ht[ht.length]?
=?ht[pcode]?+?key.substr(0,?1);
????????????????????pcode?
=?ht.length?-?1;
????????????????}

????????????????used?
++;
????????????????intLeftOver?
-=?12;
????????????????intOutputCode?
&=?(Math.pow(2,intLeftOver)?-?1);
????????????}?
else?{
????????????????
break;
????????????}
????????}
????}
????
return?strNormalString;
}
//-->
</script>
</head>
<body>
壓縮前:

<input?type="text"?id="txtNormal"?value=""?/>
<input?type="button"?value="↓壓縮"?onclick="document.getElementById('txtCompressed').value=Compress(document.getElementById('txtNormal').value);"?/>
<input?type="button"?value="清除"?onclick="document.getElementById('txtNormal').value='';"?/>


壓縮后:
<br>
<input?type="text"?id="txtCompressed"?value=""?/>
<input?type="button"?value="↑解壓"?onclick="document.getElementById('txtNormal').value=Decompress(document.getElementById('txtCompressed').value);"?/>
<input?type="button"?value="清除"?onclick="document.getElementById('txtCompressed').value='';"?/>
</body>
</html>

轉載于:https://www.cnblogs.com/liyinkan/archive/2011/09/16/2178686.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275274.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275274.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275274.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

尤雨溪推薦神器 ni ,能替代 npm/yarn/pnpm ?簡單好用!源碼揭秘!

1. 前言大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12想學源碼&#xff0c;極力推薦之前我寫的《學習源碼整體架構系列》jQuery、underscore、lodash、vuex、sentry、axios、redux、koa、vue-devtools、vuex4、koa-compose、…

如何了解自己的認知偏差_了解吸引力偏差

如何了解自己的認知偏差Let me introduce you the attractiveness bias theory known as cognitive bias.讓我向您介紹稱為認知偏差的吸引力偏差理論。 Think about a person with outstanding fashion. It will draw our attention, and maybe encourage us to interact with…

隱馬爾可夫模型(HMM)及Viterbi算法

HMM簡介 對于算法愛好者來說&#xff0c;隱馬爾可夫模型的大名那是如雷貫耳。那么&#xff0c;這個模型到底長什么樣&#xff1f;具體的原理又是什么呢&#xff1f;有什么具體的應用場景呢&#xff1f;本文將會解答這些疑惑。  本文將通過具體形象的例子來引入該模型&#xf…

尤大直播分享:vue3生態進展和展望

大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12前言10月23日&#xff0c;參加了前端早早聊組織的【vue生態專場】&#xff0c;準備寫一波分享方便大家學習。早上有4個話題&#xff1a;volar開發&#xff0c;搭建平臺組件開發…

利用Python查看微信共同好友

思路 首先通過itchat這個微信個人號接口掃碼登錄個人微信網頁版&#xff0c;獲取可以識別好友身份的數據。這里是需要分別登錄兩人微信的&#xff0c;拿到兩人各自的好友信息存到列表中。 這樣一來&#xff0c;查共同好友就轉化成了查兩個列表中相同元素的問題。獲取到共同好友…

女生適合學ux嗎_UX設計色彩心理學,理論與可訪問性

女生適合學ux嗎Colour is an interesting topic, which I feel is often overlooked and sometimes under-appreciated. One of the first things I was taught was the power of colour, how it can have an impact on human emotion, and that there should be purpose behin…

初學者也能看懂的 Vue2 源碼中那些實用的基礎工具函數

1. 前言大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12想學源碼&#xff0c;極力推薦之前我寫的《學習源碼整體架構系列》jQuery、underscore、lodash、vuex、sentry、axios、redux、koa、vue-devtools、vuex4、koa-compose、…

清除浮動mini版

1&#xff09; 清除浮動mini版(簡約而不簡單).clr:after { content:"";display:table;clear:both;}.clr{zoom:1;} 轉載于:https://www.cnblogs.com/jinbiao/archive/2011/09/26/2191170.html

Fiddler 十分鐘最全使用介紹

Wireshark 、HTTPWatch、Fiddler的介紹 Firebug雖然可以抓包&#xff0c;但是對于分析http請求的詳細信息&#xff0c;不夠強大。模擬http請求的功能也不夠&#xff0c;且firebug常常是需要“無刷新修改”&#xff0c;如果刷新了頁面&#xff0c;所有的修改都不會保存。Wiresha…

視覺測試_視覺設計流行測驗

視覺測試重點 (Top highlight)I often discuss the topic of improving visual design skills with junior and mid-level designers. While there are a number of design principles the designers should learn and practice, one important skill that is not often consid…

如何給開源項目提過 PR 呢?其實很簡單

大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12源碼共讀群里有小伙伴聊到如何給開源項目提PR&#xff0c;所以今天分享這篇文章。你有給開源的庫或者框架提過 PR 嗎&#xff1f;如果沒有&#xff0c;那么今天的文章會教你怎么…

一次回母校教前端的經歷

大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12已進行了三個月&#xff0c;很多小伙伴都表示收獲頗豐。分享一篇武大畢業的耀耀大佬的文章。有些時候會受限于環境影響&#xff0c;特別是在校大學生。所以要融入到積極上進的環…

設計插畫工具_5個強大的設計師插畫工具

設計插畫工具As Product Designers, most likely, we have come across illustrative work. Visual design is one important element in enhancing the user experience. As many gravitate toward attractive looking products, designers are also adapting to the changing…

如何才能更合理地分配項目獎金?

項目獎金通常情況下都是屬于基本工資之外的一種績效獎勵&#xff0c;也就是說&#xff0c;它在員工的薪酬中&#xff0c;是屬于浮動的那一部分收入&#xff0c;而不是一種固定收入。基于這樣一種認知&#xff0c;跟大家討論下如何才能更合理地進行項目獎金的分配&#xff1f; 首…

Codeforces 741 D - Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths

D - Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths 思路&#xff1a; 樹上啟發式合并 從根節點出發到每個位置的每個字符的奇偶性記為每個位置的狀態&#xff0c;每次統計一下每個狀態的最大深度 為了保證鏈經過當前節點u&#xff0c;我們先計算每個子樹的答案…

figma下載_切換到Figma并在其中工作不必是火箭科學,這就是為什么

figma下載We have seen Elon Musk and SpaceX making Rocket Science look like a child’s play. In the same spirit, should design tools be rocket science that is too hard to master? Not at all.我們已經看到埃隆馬斯克(Elon Musk)和SpaceX使Rocket Science看起來像是…

npm、yarn、cnpm、pnpm 使用操作都在這了

大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12有時候想查個命令&#xff0c;或者換個鏡像找了幾篇文章才找到&#xff0c;最近閑著沒事干&#xff0c;干脆整理一篇文檔&#xff0c;以后就不用在網上瞎搜有的還寫不全。Usage…

CAN控制器的選擇

在進行CAN總線開發前&#xff0c;首先要選擇好CAN總線控制器。下面就比較一些控制器的特點。 一些主要的CAN總線器件產品 制造商 產品型號 器件功能及特點 Intel 82526 82527 8XC196CA/CB CAN通信控制器&#xff0c;符合CAN2.0A CAN通信控制器&#xff0c;符合CAN2.0B 擴展…

洛谷 4115 Qtree4——鏈分治

題目&#xff1a;https://www.luogu.org/problemnew/show/P4115 論文&#xff1a;https://wenku.baidu.com/view/1bc2e4ea172ded630b1cb602.html 重鏈剖分&#xff0c;分別用線段樹維護每條重鏈。線段樹葉子的信息是該點輕孩子的信息&#xff1b;線段樹區間的信息是考慮重鏈的一…

每次啟動項目的服務,電腦竟然乖乖的幫我打開了瀏覽器,100行源碼揭秘!

1. 前言大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12 參與&#xff0c;已進行三個月了&#xff0c;大家一起交流學習&#xff0c;共同進步。想學源碼&#xff0c;極力推薦之前我寫的《學習源碼整體架構系列》 包含jQuery、…