extracting bit packed data
12 次查看(过去 30 天)
显示 更早的评论
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
回答(3 个)
Walter Roberson
2012-2-15
There are arithmetic means, and there is bitget()
2 个评论
Walter Roberson
2023-1-22
bitget(int8(23), 1:5)
But that is current day; perhaps int8 was not supported back in 2012.
Jan
2012-2-15
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
2023-1-21
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 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Orange 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!