0

ユーザー入力 (一度に EIGHT_BITS または一度に FOUR_BITS) に基づいてバイト配列をデコードするコードを作成しています。私は実際に EIGHT_BITS に基づいてバイト配列をデコードすることに成功しました。ここで、それらを FOUR_BITS でデコードしたいと思います。

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) を使用した別の if ステートメントです。

注: tempBuf は CHAR * 型であり、型を変更することはできません。decodeByteCount と decodeOffset はグローバル変数です。*decodeBuf は、デコードする必要があるエンコード済みのバイト配列です。elemlen は将来使用するためのものであり、私はそれを大事にします。

これは私の getByte 関数です:

UINT8 getByte(UINT8 *byteBuf)
{
  return ((UINT8)*byteBuf);
}
4

1 に答える 1

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++;
}
于 2013-03-12T10:56:34.417 に答える