How do I convert a column in an array that have 18-bit singed integer to 32-bit?
6 次查看(过去 30 天)
显示 更早的评论
I have an array with time and data that I'm trying to plot, but the problem I'm running into is that the data is a 18-bits signed. What is the best way to convert the 18-bit signed data to 32-bit signed data that can be easily processed?
I have tried converting it to a binary string and then using something like b=[a([1 1 1 1 1 1 1 1 1 1 1 1 1 1]) a] where "a" is 18 bit long binary string, and then converting it back to int32 with k = typecast(uint32(bin2dec(b)),'int32'); , but I'm not sure how to do this for a whole array. Could I use cellfun somehow? Is there a better way to approach this?
3 个评论
Walter Roberson
2022-4-29
S = '0X7FC48';
bit18 = sscanf(S, '%i')/2
bit18bin = dec2bin(bit18, 18)
N = 18;
mask = bit18>=2^(N-1)
bit32 = bit18
bit32(mask) = bit32(mask) - 2^N
dec2bin(-480, 18)
Your example does not represent -480, it represents -476
采纳的回答
Walter Roberson
2022-4-25
N = 18;
mask = bit18>=2^(N-1);
bit32 = bit18;
bit32(mask) = bit32(mask) - 2^N;
0 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Standard File Formats 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!