首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言 Base64 解碼核心邏輯:位運算 (p[0] << 4) & 0x30 詳細圖解

     編輯:程式設計綜合問答

Base64 編碼原理回顧

  • 輸入:任意二進制數據,每 3 字節 = 24 位
  • 輸出:每 6 位映射一個 Base64 字符,共 4 字符
  • 解碼:反向將 4 個字符 (4×6=24 位) 還原為 3 字節

表達式拆解

(p[0] << 4) & 0x30

假設 p 指向解碼後的 6 位值數組(每字節存一個 0-63 的值)。

逐步演示

  1. p[0] = 0x2A (二進制 10 1010) — 第 1 個 6 位值
  2. p[0] << 4 → 左移 4 位:1010 1000 (0xA8)
    將原 6 位的高 2 位移至字節的高 2 位(bit 7-6),低 4 位補 0
  3. 0x30 = 0011 0000 — 掩碼,保留 bit 5-4(即目標第 2 輸出字節的高 2 位)
  4. (p[0] << 4) & 0x30 → 1010 0000 & 0011 0000 = 0010 0000 (0x20)
    提取出原第 1 個字符的 bit 1-0,作為第 2 個輸出字節的 bit 5-4

完整解碼邏輯(3 字節輸出)

// p[0..3] 為 4 個 6 位值
out[0] = (p[0] << 2) | (p[1] >> 4);        // 6+2
out[1] = ((p[1] & 0x0F) << 4) | (p[2] >> 2); // 4+4
out[2] = ((p[2] & 0x03) << 6) | p[3];       // 2+6

(p[0] << 4) & 0x30 實際上是上述 out[1] 計算中 (p[1] & 0x0F) << 4 的變體,視具體實現索引偏移而定。

關鍵點

  • Base64 解碼本質是位流重組:6bit→8bit
  • 移位 (<<, >>) 對齊位置,掩碼 (&) 提取所需位段
  • 代碼中常見 0x30 (0011_0000), 0x0F (0000_1111), 0x03 (0000_0011) 等掩碼
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved