extracting bit packed data
9 views (last 30 days)
Show older comments
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
Answers (3)
Walter Roberson
on 15 Feb 2012
There are arithmetic means, and there is bitget()
2 Comments
Walter Roberson
on 22 Jan 2023
bitget(int8(23), 1:5)
But that is current day; perhaps int8 was not supported back in 2012.
Jan
on 15 Feb 2012
x = floor(rand(5, 200, 100) * 256);
a = rem(x(1, :, :) / 2, 4);
Are these the 2nd and 3rd "bits" you are looking for? It depends on the counting direction and if you start with 0 or 1.
Floris Jansen
on 21 Jan 2023
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(:));
0 Comments
See Also
Categories
Find more on Orange in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!