MIME (Multipurpose Internet Mail Extensions) 定義了多種編碼傳輸機制,本文實現其中兩種核心編碼:
=XX (十六進制) 表示,行長限制 76 字符(本實現簡化未換行)。=。
// QP: 4位 -> 0-9, A-F
// Base64: 6位 -> A-Z(0-25), a-z(26-51), 0-9(52-61), +(62), /(63)
int QPEncode(char *dest, const unsigned char *src, int srcLen); // dest 需 ≥ srcLen*3
int QPDecode(unsigned char *dest, const char *src); // dest 需 ≥ strlen(src)/3
int Base64Encode(char *dest, const unsigned char *src, int srcLen); // dest 需 ≥ srcLen*4/3+4
int Base64Decode(unsigned char *dest, const char *src); // dest 需 ≥ strlen(src)*3/4
// 返回值:編碼後數據長度 (不含結束符 \0)
按 6 位分組:[b1>>2] [b1<<4|b2>>4] [b2<<2|b3>>6] [b3&0x3F]。循環處理,餘數補 =。
跳過無效字符(換行符等),遇 = 停止。按 6 位還原:[c1<<2|c2>>4] [c2<<4|c3>>2] [c3<<6|c4]。
逐字節轉 =HH 格式。解碼時識別 = 後兩字符為十六進制,其餘直通。
文章提供 AnsiString / TMemoryStream 封裝函數 MimeQPBase64,並給出 Delphi 導入 .obj 的完整單元代碼 (external 聲明)。
std::string_view/span 避免緩衝區溢出風險。std::optional 或拋出異常處理錯誤輸入。