bitutil_hal.cpp
1.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include "bitutil_hal.h"
const U8 bitMask[8] = { 0x80, 0x40, 0x20, 0x10,
0x08, 0x04, 0x02, 0x01 };
U8 getByteAt(unsigned char * bitStream,
int byteIndex)
{
return bitStream[byteIndex];
}
BOOL getBitAt(unsigned char * bitStream, int bitIndex)
{
int byteIndex = bitIndex / 8;
int bitOffset = bitIndex % 8;
if ((bitStream[byteIndex] & bitMask[bitOffset]) != 0)
return TRUE;
else
return FALSE;
}
U32 getIntAt(unsigned char * bitStream,int intIndex)
{
U32 * bitStream2 = (U32 *) bitStream;
return bitStream2[intIndex];
}
U8 getByteAtBits(unsigned char * bitStream,int firstBitOffset, int length)
{
U8 byte = 0x00;
int lastBitOffset = firstBitOffset + length - 1;
int i, bit;
for (bit = lastBitOffset, i = 7;
bit >= firstBitOffset;
bit--, i--){
int byteIndex = bit / 8;
int bitOffset = bit % 8;
if ((bitStream[byteIndex] & bitMask[bitOffset]) != 0){
byte = byte | bitMask[i];
}
}
return byte;
}
U32 getIntAtBits(unsigned char * bitStream,int firstBitOffset, int length)
{
U32 integer = 0x00000000;
U8 * byte = (U8 *) &integer;
int lastBitOffset = firstBitOffset + length - 1;
int i, bit;
for (bit = lastBitOffset, i = 31;
bit >= firstBitOffset;
bit--, i--){
int byteIndex = bit / 8;
int bitOffset = bit % 8;
if ((bitStream[byteIndex] & bitMask[bitOffset]) != 0){
int byteIndex2 = 3 - (i / 8);
int bitOffset2 = i % 8;
byte[byteIndex2] = byte[byteIndex2] | bitMask[bitOffset2];
}
}
return integer;
}