2011-07-16 18 views
0

比方說,我有一些數字大的數字,像數學 - 從幾號出口能夠

5,10,7,8,9,6,2,4,8,5,3,9,78,5,6 

我需要發送這個到另一臺計算機,但作爲可能的字節數最少。我知道有一種方法可以做到這一點,我剛纔忘了叫什麼了,它是如何工作的,但一般是在做一些數學與這些數字,得到一個大的數字,從這個數字,我就可以導出數據並從這個數字中得到這個數字。提前致謝。

編輯 好吧,我需要發送這個文本在UDP中,但我需要它儘可能少的位。我正在發送一些選項,比如firstcolor-secondcolor,假設我有15種顏色。每種顏色只是數字,從1到199,但也許有更好的方式發送這些數據?謝謝。

+1

是你正在尋找壓縮字? –

+0

哼哼哈哈啊哈哈:d,不過,我不知道什麼最好的辦法做到這一點.. – Eli

回答

1

沒有人可以說哪種壓縮方案最適合您。我們沒有關於數字的任何信息。但作爲第一次嘗試,您可以將它們寫入文件並使用gzip壓縮。或者bzip27zip

只有所有這些都無濟於事,你應該考慮自己做壓縮。

您也沒有告訴我們您的操作系統(源計算機,目標計算機)以及從何處獲取數據。

[更新,基於問題中的編輯:]所以基本上你想發送一些數字,範圍在1到199之間。這非常接近單個byte可以容納的數字。

如果可以使用每個數字8位(意味着每個數字浪費0.4位),這很重要,但高度依賴於編程語言。下面是它看起來像在Java語法:

ByteBuffer buf = new ByteBuffer(); 
buf.add(1); 
buf.add(199); 
buf.add(78); 
buf.add(7); 

udpSocket.send(buf.toArray()); 
+0

謝謝,編輯。 – Eli

+0

更新了我的答案。 –

+0

是的,但是我怎麼能在服務器端知道1,199,78和7是不同的數字..? – Eli

0

得到一個壓縮庫(如zlib,例如)和(作爲一個整數數組,例如)餵你的號碼。這是壓縮您的數據。這同一個庫應該讓你扭轉這一進程和解壓縮在另一端的數據,讓您的價值觀退了出去。

如果你想提高你的算法知識,並且你的需求是簡單而不重要的,我建議你去編寫你自己的壓縮/解壓縮代碼。如果沒有,從架子上取一些代碼 - 有加載好的圖書館。

+0

嗯..我使用C++作爲服務器和客戶端的obj-c。你能給我一個使用這個zlib的例子嗎?對我來說這也是最好的解決方案,你覺得呢?謝謝。 – Eli

+0

zlib是一個C庫,因此在客戶端和服務器端都應該可行。官方網站是http://www.zlib.net/,但我恐怕沒有任何具體的例子可以提供(儘管谷歌會投入很多)。至於是否依賴於許多因素的最佳解決方案,性能是關鍵因素。 zlib速度非常快,您可以壓縮內存並避免寫入/讀取文件的IO成本。當然,壓縮/解壓縮不是免費的。 – Ben