我正在嘗試在我正在設計的網絡化個人項目中爲協議構建一個可變位寬的二進制編碼器/解碼器......並且我的愚蠢大腦完全卡住了了解如何掌握可變比特二進制編碼/解碼。我一直在盯着同樣的〜18 SLOC,現在已經有四天了,我仍然感覺完全沒有了我的深度。我確實認爲我應該能夠把握這一點,但不幸的是,當我試圖追蹤不同的數字關係時,我的大腦隨機地排除了:(對可變位二進制塊中的十進制值進行編碼/解碼
理論上,我想要做的事非常簡單:我聲明一個位寬列表,和值我想那位寬內存儲,就像這樣:
[10 bits]: 1013
[1 bit ]: 1
[2 bits]: 3
[19 bits]: 51209
服用bitwidths考慮,該值將逐步測序成二進制字符串,像這樣:
1 bit
| 2 bits
| ||
/-10 bits--\ | \/ /------ 19 bits ------\
12345678 12 3 45 678 12345678 12345678
11111101 01 1 11 000 11001000 00001001
\----------/ | \/ \---------------------/
1012 1 3 51209
在比特流上面的大膽是我傳遞下來的線材:
11111101 253 FD
01111000 120 78
11001000 200 C8
00001001 9 09
在另一端,我映射列表{10, 1, 2, 19}
我收到(設定在頂部表示bitwidths)針對字節的順序,然後讓我與原來的設定值的我想要傳送。
儘管這主要是一個通用的算法問題,任何特定語言的語義都可以說是無關緊要的,但我應該提及,我正在使用PHP來實現這一點 - 而且我堅持的部分原因是我試圖找出如何避免使用字符串操作,PHP似乎傾向於鼓勵人們傾向於正確的數字處理。然而,這個功能將(希望)以2到3位Mbps的速度處理數據,並且我希望程序儘可能快。 (順便說一下,我會使用另一種語言,但PHP是我知道的最多> _>)
我明白二進制的基礎知識,我應該強調我確實有一個工作的編碼器,我認爲(它向後輸出二進制數據) - 但我不知道我在這裏做什麼。我並不是問「我怎麼寫這個函數」,我問「我在做什麼的結構力學,我怎麼才能把握這個。」
我還應該指出,這個問題並不是一個簡單的變相作業練習;它適用於我設計的個人軟件項目中的網絡庫組件,希望能夠教會我有關網絡,事件處理和併發性的知識。希望我能掌握所有其他的事情,我需要實現...笑
你能分享你試過嗎? –
請添加你已經嘗試/嘗試並顯示你正在尋找的東西(具體如你所描述的那樣)! – Rizier123