필터 지우기
필터 지우기

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 CenterFile Exchange에서 Numeric Types에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by