extracting bit packed data
Mostrar comentarios más antiguos
Hi
I have an matrix with dimensions 5 x 200 x 100, I want to extract the data encoded in the 2nd and 3rd bit of the first byte (first byte means 1 x 200 x 100).
similarly i would need the data encoded in the 4th and 5th bit also.
Please note that by "data" i mean a digit between 0-3 (as it is being extracted from 2 bits)
Best regards, Muhammad
1 comentario
Respuestas (3)
Walter Roberson
el 15 de Feb. de 2012
0 votos
There are arithmetic means, and there is bitget()
2 comentarios
Muhammad
el 16 de Feb. de 2012
bitget(int8(23), 1:5)
But that is current day; perhaps int8 was not supported back in 2012.
Bit late with an answer, but this should work for you:
Note that if the bits are not contiguous you could still extract the data, but it will be a bit more work...
% start with a multi dimensional array of uint8
% (any number of dimensions should work)
myData = uint8(randi(255,[10,20,30]));
% create a mask with ones in the bit positions you want:
mask1 = 0b00110000; % extract 2 bits in positions 2,3
mask2 = 0b00011100; % extract 3 bits in positions 3,4,5
% now do bit and, and shift to get the number
data1 = bitand(myData, mask1)/16; % shift right by 4
data2 = bitand(myData, mask2)/4; % shift right by 2
% observe the results:
figure
subplot(2,1,1)
histogram(data1(:));
subplot(2,1,2);
histogram(data2(:));
Categorías
Más información sobre Logical en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
