對於您給出的「方向基(360)日基(366)小時基(24)分鐘基(60)」的特定示例,事實證明其中兩個非常適合55位。 (360 x 366 x 24 x 60)只是一個小於2的污點。因此,編碼和解碼只需使用乘法和除法(分別獲得商和餘數)。這可以用64位算術完成,所以不需要大的整數例程。實際上,55位中只有0.001位被浪費了!
因此,對於範圍爲1..360,1..366,1..24和0..59的direction:day:hour:minute
,則序列{a:b:c:d, e:f:g:h}
編碼爲(((((((a - 1) * 366 + (b - 1)) * 24 + (c - 1)) * 60 + d) * 360 + (e - 1)) * 366 + (f - 1)) * 24 + (g - 1)) * 60 + h
。解碼需要60的餘下部分得到h
。取這個商數,然後除以24的餘數得到g - 1
,依此類推。
然後,55位序列可以連接成一個位流,其中八個連接55個字節。
未使用的55位序列可用於終止序列。例如。所有1位,除最後一位之外的所有1位都是零,等等。可以使用兩個不同的終結符來指示倒數第二個55位序列是否包含一個或兩個向量。
要做得更好的唯一方法是利用數字上的非均勻分佈和/或連續向量之間的相關性。對於後者,您應該考慮這些數字中的部分或全部數字是否可能與先前矢量中的相應數字接近或相同。如果存在這樣的相關性,那麼您可以發送差異,並進行一些壓縮,從而大大減少所需的比特總數。
輸入整數或浮點以?開頭嗎?你是否更關心無損或儘可能少使用?連續的讀數是否可能相似(或以某種方式相關)? – NPE
我認爲你正在使用三角洲?這將大大減少消息的大小,但是你不得不假設一條有損線路,而不是所有消息都能通過。 – Richard
我真正需要的是我們需要更多信息才能提供有意義的建議。 – NPE