嗯,你已經已經突破它分解成以下步驟:
- 讀8位在同一時間做出字節
- 然後保存,作爲一個INT
- 的東西,到數組indes
太棒了!我們來看看每一個。
首先,您需要一次讀取一個字符的文件。 C標準庫爲此提供了一個功能:fgetc
。通過一個FILE *
,它會將您讀取的數字的ASCII值或EOF
(-1)返回到文件末尾。
所以,我們知道我們可以用fgetc
,且無任何換行符,我們知道它會返回'1'
,'0'
,或EOF
。換句話說:
10001101 => successive fgetc() calls will return
'1', '0', '0', '0', '1', '1,' '0', '1', 'EOF'
這聽起來像一個循環:
for (int bits = 0; bits < 8; bits++) {
int digit = fgetc(file);
if (digit == '0') {
// something
} else if (digit == '1') {
// something else
} else if (digit == EOF) {
// done with the file
}
}
所有權利。現在,我們如何將0和1組合成一個二進制數?答案有點改變。我們設置一個變量來保存輸出數字,然後重複設置最低位並將其他位向上移。所以:
10001101
'1' => 1
'0' => 10
'0' => 100
'0' => 1000
'1' => 10001
'1' => 100011
'0' => 1000110
'1' => 10001101
所以:
int number = 0;
for (int bits = 0; bits < 8; bits++) {
// shift number up one place
number = number << 1;
int digit = fgetc(file);
if (digit == '0') {
// do nothing; the lowest bit is 0 already
} else if (digit == '1') {
// set number's lowest bit
number |= 0x01;
} else if (digit == EOF) {
// done with the file
}
}
現在,所有你需要做的是包裹在另一個循環,使number
在數組中。這只是記住你已經存儲了多少個數字(一個計數器),然後在你點擊文件結尾時從循環中逃脫。
有關文件格式細節的一點亮點,請您提供一個更好的輸入數據示例。值分隔,全32位提供的所有int值,或者它們的長度是任意的,由空白等分隔。 – WhozCraig