在PHP 中, bindec()函數用於將一個二進製字符串轉換成對應的十進制整數。舉例來說:
<?php
echo bindec("1101"); // 輸出 13
?>
這使得我們可以輕鬆地將二進制形式的數據轉化為十進制數字,方便後續計算。
但是,C 語言標準庫中並沒有直接提供這樣一個函數,因此如果想在C 語言中實現類似功能,我們需要自己編寫代碼來完成這個轉換。下面我將詳細介紹如何用C 語言實現bindec()的功能。
實現思路其實非常直觀:
遍歷輸入的二進製字符串,從左到右或者從右到左。
將每一位字符'0' 或'1' 轉換為對應的數值。
按照二進制的權重計算總和:每一位乘以2 的對應冪次。
累加這些結果,最終得到對應的十進制數。
#include <stdio.h>
#include <string.h>
// 將二進製字符串轉換為十進制整數
unsigned int bindec(const char *binaryStr) {
unsigned int result = 0;
int len = strlen(binaryStr);
for (int i = 0; i < len; i++) {
char c = binaryStr[i];
if (c == '1') {
result = (result << 1) | 1; // 左移一位,加上當前位1
} else if (c == '0') {
result = result << 1; // 左移一位,加上當前位0
} else {
// 如果字符串中有非 '0' 或 '1' 字符,可以返回錯誤或忽略
// 這裡簡單處理,直接返回0,實際使用中可改進
return 0;
}
}
return result;
}
int main() {
const char *binaryStr = "1101";
unsigned int decimalValue = bindec(binaryStr);
printf("二進製字符串 %s 對應的十進制是 %u\n", binaryStr, decimalValue);
return 0;
}
運行效果:
二進製字符串 1101 對應的十進制是 13
strlen用於獲取字符串長度。
遍歷字符串的每一個字符:
如果是'1',則先將當前結果左移一位(相當於乘以2),再加1。
如果是'0',則只左移一位,不加任何值。
最後返回累加的結果。
這樣便完美模擬了PHP 中bindec()函數的行為。
雖然C 語言沒有內置的bindec() ,但通過簡單的位運算和字符串遍歷,就可以輕鬆實現二進制轉十進制的功能。掌握這種思路,不僅能幫助我們完成基本轉換,還能加深對二進制和位運算的理解。