2014-06-06 2 views
-1

각 8 비트로 구문 분석 할 32 비트 문자열이 있습니다.MATLAB에서 문자열 구문 분석

str = '00000001000000100000001100000100'

output = '1 2 3 4'

내가 bin2dec를 사용하는 알지만, 어려움 문자열을 구문 분석하는 데 문제가 있습니다 : 그럼 예를 들어, 하나의 정수로 8 비트 바이너리를 변경하고 싶습니다.

+2

'의 STR (1 : 8) '제 8 자리수된다'STR은 (9:16)'다음 옥텟 등 MATLAB 문자열이있다 문자 유형의 행렬이므로 모든 평행 행렬 산술, 색인 생성, 검색을 사용할 수 있습니다. –

답변

1

Ben Voigt는 의견에 대한 질문에 거의 답을했지만이 질문에 대한 답변을 제공하지 않은 것으로 보아 폐쇄를 제공 할 것입니다. 그가 말한대로 문자열을 8 자로 나눌 수 있습니다. 문자열은 기본적으로 문자 배열입니다. 따라서 문자열을 8 자로 나눈 다음 각 문자열에 bin2dec을 적용하십시오.

str = '00000001000000100000001100000100'; 
byte1 = bin2dec(str(1:8)); 
byte2 = bin2dec(str(9:16)); 
byte3 = bin2dec(str(17:24)); 
byte4 = bin2dec(str(25:32)); 
output = num2str([byte1 byte2 byte3 byte4]); 

>> output 

output = 

1 2 3 4 

귀하의 예제 출력을 보면, 당신은 문자열과 코드의 마지막 줄에 따라서 num2str 전화로 output를 원한다.

2

Matlab에서는 모든 문자열이 매트릭스이므로이 속성을 사용할 수 있습니다. , 이것은 vetor [1;2;3;4]을 반환

output=bin2dec(reshape(str,8,[]).') 

: 당신은 출력을 얻을 수 bin2dec을 적용 할 수 있습니다, 이렇게

reshape(str,8,[]).' 

: 8 비트 하나의 바이트에 속하는 경우, 행 당 하나의 바이트를 가지고 데이터를 바꿀 char 배열을 대신 사용하려면 num2str(output.')을 사용하십시오.

+1

니스. 배열을 재구성하는 것을 고려하지 않았습니다. – rayryeng

+0

네, 이것을 바로 잡았습니다. – Daniel

1

또 다른 가능성 : 물론

>> 2.^(7:-1:0)*reshape(str-'0',8,[]) 
>> ans = 
     1  2  3  4 

, 당신은 문자열의 형태로 출력을 필요로하는 경우 num2str을 적용합니다.


보다 난해한 방법 :

>> fliplr(typecast(uint32(2.^(31:-1:0)*(str-'0').'),'uint8')) 
>> ans = 
     1 2 3 4