Lassen Sie uns sagen, ich habe einen Puffer und ich brauche 6 Bits. Vier Bits von einem Element im Puffer und zwei Bits vom nächsten Element. Ich denke, ich weiß, wie man auf die richtigen Bits von jedem Element zugreift, aber ich bin nicht sicher, wie man die Bits kombiniert. Hier ist ein Beispielcode.Wie bit masking zu verwenden, um Zugriff auf sechs Bits aus Puffer
FILE * pFile;
long lSize;
unsigned char * buffer;
//int16_t * buffer;
size_t result;
pFile = fopen ("TestFile.jpg" , "rb");
if (pFile==NULL) {fputs ("File error",stderr); exit (1);}
// obtain file size:
fseek (pFile , 0 , SEEK_END);
lSize = ftell (pFile);
//lSize = (ftell (pFile))/2;
rewind (pFile);
// allocate memory to contain the whole file:
buffer = (unsigned char*) malloc (sizeof(unsigned char)*lSize);
//buffer = (int16_t*) malloc (sizeof(int16_t)*lSize);
if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}
// copy the file into the buffer:
result = fread (buffer,1,lSize,pFile);
//result = fread (buffer,2,lSize,pFile);
if (result != lSize) {fputs ("Reading error",stderr); exit (3);}
/* the whole file is now loaded in the memory buffer. */
// I think this should get the last four bits of this element (buffer[i] >> 4) & 0xF)
// I think this should get the first two bits from the next element (buffer[i+1] & 0x3)
if (32 == (((buffer[i] >> 4) & 0xF) & (buffer[i+1] & 0x3))){
/*Do something.*/
}
Welche 4 Bits haben Sie von dem ersten Byte benötigen , und welche 2 Bits benötigen Sie von der Sekunde? Danach, in welcher Reihenfolge sollten sie sich befinden, wenn sie verkettet werden müssen? –
Danke für die Antwort. In diesem Beispiel die letzten vier im ersten Byte und die ersten zwei im zweiten. Dann kommt für die Verkettung das erste Byte zuerst. Also bekomme ich sechs weitere Bisse aus dem Puffer. – Kahless
Also, für die zwei Bytes mit Bits: 'abcdefgh ijklmnop', wollen Sie ein einzelnes Byte, das die Bits hat:' 00efghij'? Ist das korrekt? – Makyen