2013-02-01 8 views
0
char str[33] = ""; 
snprintf(str, sizeof str, "%s%s%s%s", preg->opbits,preg->rsbits,preg->rtbits,preg->ibits); 
char *instruction = &str[0] 

MIPS 어셈블리 명령어의 문자열 표현에서 32 비트 길이의 다른 요소로부터 이진 문자열을 작성하려고합니다. 여기서 opbits는 6 비트 opcode이고 rsbits는 첫 번째 소스의 5 비트 숫자입니다. rtbits는 즉치 (i) 형 명령어의 대상 레지스터의 5 비트 수이고 ibits는 16 비트 정수 값을 나타냅니다. 이 배열을 문자 배열로 연결 한 다음 해당 배열의 첫 번째 요소에 포인터를 할당합니다. 이미 정의 된 함수에 포인터를 전달할 수 있습니다. 문자열로 쓰여진 숫자를 변환합니다 (strtoint 함수에 전달 된 지정된 기준으로).)를 정수 값으로 변환합니다.snprinf()를 사용하면 각 연결된 문자열 끝에 null 바이트를 고려해야합니까?

내 가장 중요한 질문은 모든 문자열 끝에 연결된 null 바이트를 연결해야한다는 것인가? 둘째로이 방법이 효과가 있습니까?

+0

'6 + 6 + 6 + 16 = 34'이다 = str [35] = "";', 그러나 당신은 각 부분의 0 바이트. 결과의 값만. –

+0

기계 opcode 데이터 안에 null 문자에 대해 더 걱정할 것입니다. 또한 다양한 6 비트 필드를 팩킹한다는 의미입니까? 'snprintf()'에는 그 라인을 따라 무엇인가하는 것이 없습니다. –

+0

죄송합니다. 레지스터 번호는 5 비트가 아니라 6 비트입니다. – wsmccusker

답변

3

, 내가 모든 문자열의 끝에 널 바이트를 차지해야합니까 내 주요 질문은,이 작업을 할 연결된 모든의 두번째한다? 당신의 문자열 결과의 길이는 32 + 1이면

아니 당신은 모든 하위 문자열을 널 문자를 계산하지 않아도, 당신은

그래서 결과 문자열 연결 만 1 널 문자를 추가 할 필요가 없습니다 (null 문자)는 어쩌면 당신은`문자가 있어야합니다, 당신의 결과의 길이는 문자열 conctaned 경우 33

그래서 당신의 정의는 OK (32)

char str[33] = "";