2014-10-11 2 views
0

2 진수를 갖는 첫 번째 열과 두 번째 열에 두 번째 열에 문자열 폭이있는 텍스트 파일 입력이 있습니다. 데이터 출력시 사용). 바이너리 입력을 읽은 후 비트 조작을 수행해야합니다.텍스트 입력 파일에서 0과 1을 읽고 비트 조작 (시프 팅)을 수행하려면 어떻게합니까?

아래 코드를 사용하여 입력 파일을 읽고 inputunsigned int으로 선언했습니다.

while ((fscanf(fp,"%s %d", input, &count) != EOF)) 

비트 조작을 수행하려고 할 때 입력을 취한 후에 "유효하지 않은 피연산자가 2 진수로 표시됩니다"라는 오류 메시지가 표시됩니다. 그래서 어떤 선언을 잘못하고있는 중이거나 비트 조작을 수행하기 위해 이진수를 10 진수로 변환해야합니까? 조작 후 비트 시퀀스로 파일에 출력을 보내야합니다.

+0

'이진 입력을 읽은 후에 비트 조작을 수행해야합니다. do so I. – wildplasser

+0

텍스트 파일의 두 번째 열은 문자열이지만 정수로 읽는다고 가정합니다. 또한 텍스트 파일에서 이진수를 정수로 읽으려고해도 올바른 값을 얻을 수 없습니다. –

+0

또한, 사용 된 변수 유형은'fscanf' 형식 지정자와 일치해야합니다. 따라서 "unsigned int"변수와 함께 "% s"를 사용하면 정의되지 않은 동작이 발생합니다. – SleuthEye

답변

3

입력 파일 예제를 추가하면 더 쉬워 질 것입니다. 그러나 먼저 입력을 정확하게해야합니다.

0011101 10 
1001011 20 
0101011 30 
1001010 40 

이 다음 줄 것이라고 출력 :

input: 0011101, count 10, bin 29 
input: 1001011, count 20, bin 75 
input: 0101011, count 30, bin 43 
input: 1001010, count 40, bin 74 
이 같은 "infile.txt"보고 뭔가라는 이름의 입력 파일에

#include <stdio.h> 
#include <stdlib.h> 

int  main(void) 
{  
     FILE *fp; 
     char input[80]; 
     int  count; 
     int  bin; 

     fp = fopen("infile.txt", "r"); 
     while ((fscanf(fp,"%s %d", input, &count) != EOF)) { 
       bin = strtol(input, NULL, 2); 
       printf("input: %s, count %d, bin %d\n", input, count, bin); 
     } 
     fclose(fp); 
     return 0; 
} 

: 난 당신이 먼저이 같은 시도 제안

그래서 내가 옳은 길을 걷지 않는다면 알려주세요!

+0

감사합니다. 이것은 내가 전에 가지고 있었던 정확한 코드이지만 다른 사용자가 strtol 함수를 추천했습니다. 십진수에서 이진수로 변환하는 비슷한 함수가 있는지 알고 있습니까? – raydude

+0

바이너리 ** 문자열 **로 변환 하시겠습니까? 검색 엔진은 이러한 변환기를 많이 찾을 수 있습니다. 수신 버퍼에 충분한 공간을 확보하고 sprintf()가 트릭을 수행 할 수 있다면 이식 할 수 없다는 점을 명심하십시오. – Rein

관련 문제