フィルターのクリア

R2012b convert HEX to binary and extract individual bits

17 ビュー (過去 30 日間)
joshmartinmont
joshmartinmont 2015 年 12 月 15 日
編集済み: James Tursa 2015 年 12 月 15 日
I have a data set that is output in HEX. I know how to convert the HEX to binary, even though in the R2012b release it's kinda convoluted.
>> DecimalNumber = hex2dec(X) %Where my HEX number is 4 digits in length 1-F in value for each digit
>> BinaryNumber = dec2bin(DecimalNumber,16) %giving me all 16 binary digits even when there are leading zero's
What I want to do is then break this into bit segments where I would get:
bits 1-5
bit 6
bits 7-11
bits 12-16
This will allow me to take my status word and see what the data is doing and what kinds of errors, if any, it are being reported out. I haven't been able to figure out a way to do this. Does anyone have any suggestions?

採用された回答

James Tursa
James Tursa 2015 年 12 月 15 日
Is this all you are trying to do?
bits01_05 = bin2dec(BinaryNumber(1:5));
bits06_06 = bin2dec(BinaryNumber(6:6));
bits07_11 = bin2dec(BinaryNumber(7:11));
bits12_16 = bin2dec(BinaryNumber(12:16));
  3 件のコメント
joshmartinmont
joshmartinmont 2015 年 12 月 15 日
編集済み: joshmartinmont 2015 年 12 月 15 日
OK. I've managed to import the file and have it give me three variables.
>>dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'HeaerLines', startRow-1, 'ReturnOnError', false);
>>dataArray{1} = datenum(dataArray{1}, 'HH:MM"SS.FFF');
>>Timestamp = dataArray{:, 1};
>>MsgInfo = dec2bin(hex2dec(cellfun(@(x)(x(4:end),dataArray{:, 2}, 'UniformOutput', false)),16);
>>CmndWrd1 = dec2bin(hex2dec(cellfun(@(x)(x(4:end),dataArray{:, 2}, 'UniformOutput', false)),16);
It turns out what I want to do with looking at the bits may be harder than I thought. I need to convert bits 1-5 of CmndWrd1 to decimal, bits 7-11 of CmndWrd1 to decimal. This is easy enough to do, but the hard part is that I want to now make those two numbers into a single string and add in some conditional statements to allow for bit 6 of the CmndWrd1 changing and for bit 7 of MsgInfo to change around.
>>str = {[num2str(bin2dec(CmndWrd1(:,1:5))),'.',num2str(bin2dec(CmndWrd1(:,7:11))),'.',[if CmndWrd1(:,6) == 0, 'R', else, 'T', end],' ',[if MsgInfo(:,7) == 0, 'busB', else, 'busA', end]]}
This would give me a string that would look like: '25.8.R busB'.
I tried using this exact function but get the error "Expression or statement is incomplete or incorrect". Which I figured it would but, but I'm not sure how to make this work.
James Tursa
James Tursa 2015 年 12 月 15 日
編集済み: James Tursa 2015 年 12 月 15 日
Try this:
str = {[num2str(bin2dec(CmndWrd1(:,1:5))),'.',num2str(bin2dec(CmndWrd1(:,7:11))),'.',char('R'+2*(CmndWrd1(:,6)-'0')),' bus',char('B'-(MsgInfo(:,7)-'0'))]}

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeNumeric Types についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by