2010-03-06 128 views
3

我正在設計一個通過UDP的可靠數據傳輸,其中在UDP數據緩衝區中是一個字符數組,並且在它的前兩個字節中,我必須放置像00010000這樣的位....等等,我想知道如何實現這一點。請讓我知道,如果你需要的任何信息,在此先感謝您的幫助,我真的很感激將整數值轉換爲位並將其存儲到char數組中?

+1

您可以將整數值分配給一個'char'變量,只要它不會溢出。 '00010000'是16. – 2010-03-06 03:57:08

+1

UDP是一個面向八位字節的協議,你不能在其中放入位。你以某種方式必須將這些位打包成八位字節。最明顯的解決方案是將位流分成8位組,並使每組的第一位最多(或者最少,這取決於您)相應八位位組的有效位。換句話說,您可以將'00010000'表示爲數字16。 – avakar 2010-03-06 04:03:17

回答

1

寫轉換成數字串的(字符數組) 步驟的功能: 1.divide由整數2並將模值存儲在字符數組中。 2.用整數減去商值並將結果存儲在相同的整數中 3.繼續執行步驟1和2,直到整數值變爲零。

希望這將是簡單的轉換程序

0

,或者使用更通用的函數寫一個位到緩衝區(字符數組) `

void setBitAt(char* buf, int bufByteSize, int bitPosition, bool value) 
{ 
    if(bitPosition < sizeof(char)*8*bufByteSize) 
    { 
     int byteOffset= bitPosition/8; 
     int bitOffset = bitPosition - byteOffset*8; 

     if(value == true) 
     { 
      buf[byteOffset] |= (1 << bitOffset); 
     } 
     else 
     { 
      buf[byteOffset] &= ~(1 << bitOffset);; 
     } 
    } 
} 

`

1

你是問,「如何將[u] int-stream轉換爲字節串?」

那麼你可以試試這個:

1. Pick next integer x = uint[i] 
2. Get four bytes out of it as 
b4 = x & 0xFF000000 
b3 = x & 0x00FF0000 
b2 = x & 0x0000FF00 
b1 = x & 0x000000FF 
3. Write the four bytes into the stream s, e.g. 
s << b4 << b3 << b2 << b1; 
4. i += 1 
5. Go to 1