2014-10-11 47 views
0

我有一個文本文件輸入,它具有兩列,第一列具有二進制數字,第二列具有字符串寬度(這將在輸出數據時使用)。讀取二進制輸入後,我需要執行位操作。如何從文本輸入文件讀取0和1並執行位操作(移位)

我在使用下面的代碼讀取輸入文件,並將input聲明爲unsigned int

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

在我嘗試執行位操作時,我收到了一個「無效的操作數到二進制」錯誤消息的輸入。所以我做任何聲明錯誤或我需要將二進制轉換爲十進制來執行位操作?我需要在操作後將輸出發送到一個文件。

+0

'我需要在讀取二進制輸入後執行位操作。 '我也是這樣。 – wildplasser 2014-10-11 23:40:21

+0

你說文本文件中的第二列是一個字符串,但是你把它看作一個整數。另外,試圖從整個文本文件中讀取一個二進制數字並不會給你正確的值。 – 2014-10-11 23:44:13

+0

另外,使用的變量類型應該匹配'fscanf'格式說明符。所以在你的情況下,使用「%s」和「unsigned int」變量會導致未定義的行爲 – SleuthEye 2014-10-11 23:44:44

回答

3

如果你添加了一個輸入文件的例子,但你首先需要輸入正確的話會更容易。我建議你第一次嘗試這樣的事情:在名爲 「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; 
} 

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 

所以,如果我不在正確的軌道上,讓我知道!

+0

謝謝。這是我以前的確切代碼,但函數strtol被其他用戶推薦。你知道是否有類似的功能將十進制轉換爲二進制? – raydude 2014-10-12 03:28:39

+0

你的意思是轉換爲二進制**字符串**嗎?您的搜索引擎可以找到很多這樣的轉換器。只要確保您爲接收緩衝區預留了足夠的空間,並且請注意,如果您的sprintf()可以做到這一點,那麼它可能不是可移植的。 – Rein 2014-10-12 09:19:32

相關問題