2013-03-12 67 views
0

我正在編寫一個代碼來解碼基於用戶輸入(一次EIGHT_BITS或一次FOUR_BITS)的字節數組。我實際上設法解碼基於EIGHT_BITS的字節數組。現在我想用FOUR_BITS解碼它們。解碼字節數組中的一個字節的FOUR_BITS(C)

INT DecodeElem(UINT8 *decodeBuf, UINT8 elemlen, UINT8 *tempBuf, UINT8 elemlength){ 

    if (elemlength== EIGHT_BITS){ 
    *tempBuf = getByte(decodeBuf + decodeByteCount); 
    decodeOffset = 0; 
    decodeByteCount++; 
    } 
} 

即如果elemlength = FOUR_BITS,我需要字節陣列中的特定字節的前4位進行解碼。有人能讓我知道如何在不修改我上面寫的EIGHT_BITS的情況下做同樣的事情嗎?

我基本上需要的是另一種if語句,如果(elemlength == FOUR_BITS)

注:tempBuf是CHAR *類型,我不能改變的類型。 decodeByteCount和decodeOffset是全局變量; * decodeBuf是需要解碼的已編碼字節數組。 elemlen供將來使用,我會照顧它。

這是我的了getByte功能:

UINT8 getByte(UINT8 *byteBuf) 
{ 
    return ((UINT8)*byteBuf); 
} 
+1

您需要屏蔽掉高4位,然後將每個輸入字節的低4位,並做一些比特移位... – Nick 2013-03-12 10:47:34

+0

可以你請給我一個相同的僞代碼?我很困惑如何在* tempBuf上做位移和遮罩。我知道如何掩飾和轉移,但不知道如何在* tempBuf上執行此操作。 – 2013-03-12 10:50:34

+0

每個輸入字節是否只包含一個輸出字節?即餘下的4個字節沒有被使用?還是數據包裝? – Nick 2013-03-12 10:54:10

回答

1

我不知道什麼decodeOffset和decodeByteCount確實....
它應該是類似的東西(假設每個字節有2個4位值如果假設是從碼錯誤刪除「/ 2」):

if (elemlength== FOUR_BITS){ 
    *tempBuf = getByte(decodeBuf + decodeByteCount/2); 
    if(decodeByteCount % 2) 
     *tempBuff = (*tempBuff & 0xF0) >> 4; 
    else 
     *tempBuff = (*tempBuff & 0Xf); 
    // ???decodeOffset = 0; 
    // ???decodeByteCount++; 
} 
+0

謝謝:)這有幫助:) – 2013-03-12 10:58:15

+0

順便說一句,如果(decodeByteCount%2)是什麼意思? – 2013-03-12 11:00:16

+0

@BryanAdams不客氣!如果它適合你,請「接受」答案。 – idoo 2013-03-12 11:00:43

相關問題