溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在JavaScript中將二進制轉換為十六進制

發布時間:2022-04-25 15:57:31 來源:億速云 閱讀:501 作者:iii 欄目:大數據
# 如何在JavaScript中將二進制轉換為十六進制

## 引言

在編程中,數字系統的轉換是一項常見任務。二進制(基數為2)和十六進制(基數為16)是兩種廣泛使用的數字表示方法。二進制適合機器處理,而十六進制因其簡潔性(1位十六進制對應4位二進制)常被用于簡化二進制表示。本文將詳細介紹在JavaScript中實現二進制到十六進制轉換的多種方法。

---

## 方法一:使用`parseInt()`和`toString()`

### 核心步驟
1. **二進制字符串轉十進制**  
   使用`parseInt(binaryString, 2)`將二進制字符串解析為十進制整數。
   ```javascript
   const binary = '11010110';
   const decimal = parseInt(binary, 2); // 214
  1. 十進制轉十六進制字符串
    通過decimal.toString(16)將十進制數轉換為十六進制字符串。
    
    const hex = decimal.toString(16); // 'd6'
    

完整代碼示例

function binaryToHex(binaryString) {
    const decimal = parseInt(binaryString, 2);
    return decimal.toString(16);
}

console.log(binaryToHex('11010110')); // 輸出: "d6"

注意事項

  • 輸入必須是有效的二進制字符串(僅含01)。
  • 轉換結果可能包含小寫字母,如需大寫可調用.toUpperCase()。

方法二:手動轉換(算法實現)

實現原理

  1. 補全位數
    確保二進制字符串長度為4的倍數(十六進制每4位對應1位)。

    while (binaryString.length % 4 !== 0) {
       binaryString = '0' + binaryString;
    }
    
  2. 分段轉換
    每4位二進制轉換為1位十六進制:

    const binaryToHexMap = {
       '0000': '0', '0001': '1', '0010': '2', '0011': '3',
       '0100': '4', '0101': '5', '0110': '6', '0111': '7',
       '1000': '8', '1001': '9', '1010': 'a', '1011': 'b',
       '1100': 'c', '1101': 'd', '1110': 'e', '1111': 'f'
    };
    

完整代碼示例

function binaryToHexManual(binaryString) {
    // 補全位數
    while (binaryString.length % 4 !== 0) {
        binaryString = '0' + binaryString;
    }
    
    let hexResult = '';
    for (let i = 0; i < binaryString.length; i += 4) {
        const chunk = binaryString.substr(i, 4);
        hexResult += binaryToHexMap[chunk];
    }
    return hexResult;
}

console.log(binaryToHexManual('11010110')); // 輸出: "d6"

方法三:使用BigInt處理大數

適用場景

當二進制字符串超過Number.MAX_SAFE_INTEGER(53位)時,parseInt會丟失精度,此時需使用BigInt。

實現代碼

function binaryToHexBigInt(binaryString) {
    const decimalBigInt = BigInt('0b' + binaryString);
    return decimalBigInt.toString(16);
}

console.log(binaryToHexBigInt('11111111111111111111111111111111')); // 輸出: "ffffffff"

方法四:ES6+的padStart優化

格式化輸出

若需固定位數(如8位十六進制),可使用padStart補零:

function binaryToHexPadded(binaryString, length = 8) {
    const decimal = parseInt(binaryString, 2);
    return decimal.toString(16).padStart(length, '0');
}

console.log(binaryToHexPadded('11010110', 4)); // 輸出: "00d6"

對比與總結

方法 優點 缺點
parseInt+toString 代碼簡潔,適合大多數場景 大數精度丟失
手動轉換 無精度問題,可控性強 代碼復雜度高
BigInt 支持超大數 ES6+環境要求

推薦選擇
- 常規場景:方法一(parseInt)。 - 大數處理:方法三(BigInt)。 - 教學/底層理解:方法二(手動實現)。


附錄:常見問題

1. 如何處理非二進制字符串輸入?

添加驗證邏輯:

if (!/^[01]+$/.test(binaryString)) {
    throw new Error('Invalid binary string');
}

2. 為什么十六進制輸出是小寫?

JavaScript默認輸出小寫,可通過.toUpperCase()轉換:

hexResult.toUpperCase(); // "D6"

3. 如何反向轉換(十六進制轉二進制)?

使用parseInt(hexString, 16)toString(2)

const hex = 'd6';
const binary = parseInt(hex, 16).toString(2); // "11010110"

通過本文的多種方法,您可以根據需求靈活選擇最適合的二進制到十六進制轉換方案。 “`

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女