2012-08-17 64 views
0

的長度我的十進制數字像一個字符串:減少小數變量(算法)

965854242113548732659745896523654789653244879653245794444524 
length : 60 character 

我想將它發送到功能,但首先我想減少它的長度儘可能地。我怎樣才能做到這一點?

我想將它轉換爲base-34,那將是1RG7EEWTN7NW60EWIWMASEWWMEOSWC2SS8482WQE。這是40個字符的長度。我能以更多的方式減少它嗎?

+2

您可以完全以二進制形式發送它。 – 2012-08-17 08:48:25

回答

1

你的號碼適合70位 - 對於這樣一個小的有效載荷壓縮似乎是荒謬的。假設服務器API支持任意的二進制數據,我會簡單地用二進制編碼這個值,並在它前面加上所需的字節數。

  • 1字節長度的信息 - 用於854657986453156789675,最初給的例子,這將是9個
  • 9字節二進制有效負載的

→ 10字節傳送您的示例數據。

你在十六進制例如:

隨着以字節爲單位的長度,這當然只支持小數多達255字節的長度,但我想這是足夠的。如果您的傳輸協議具有數據包長度的內置概念,您甚至可以跳過初始長度字節。

重要:確保所有方面使用相同的字母順序。當您通過網絡傳輸數據時,網絡字節順序(big endian)將是自然的。

如果您想傳輸非常大的數字,請記住您可以使用您喜歡的任何壓縮算法來處理數據的二進制表示。但是,爲了使壓縮更加可行,您的有效負載必須大得多 - 例如,由於zLib數據結構的開銷,對上述9字節有效負載使用zLib壓縮導致18字節有效負載。

如果(且只有)您不能爲您的有效載荷使用任意字節,則可以對數據進行編碼(可能在壓縮之後)。大多數現代圖書館都支持Base64,所以這將是一種表達數據的自然方式。

+0

我只是添加一個小數點,我的小數點實際上是這樣的:965854242113548732659745896523654789653244879653245794444524,它有60個字符長度 – hamze 2012-08-17 09:13:08

+0

我重寫了這個問題的新問題 – hamze 2012-08-17 09:18:48

+0

@hamze,如果你使用長度字節,你將最終得到26個字節:'19 99 de 94 cd 69 f7 bc c0 bd 6f a8 85 3f bd c3 7a d5 71 10 72 86 77 88 e4 ec' – 2012-08-17 09:47:30