How do I convert a column in an array that have 18-bit singed integer to 32-bit?
9 ビュー (過去 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 で Data Type Conversion についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!