最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實現(xiàn)二進制字符串與十六進制字符串相互轉換

 更新時間:2025年11月24日 09:22:35   作者:熊貓_豆豆  
這篇文章主要為大家詳細介紹了如何使用C++實現(xiàn)二進制字符串與十六進制字符串相互轉換,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

以下是一個將二進制字符串轉換為十六進制字符串的C++函數(shù):

#include <string>
#include <unordered_map>

std::string binaryToHex(const std::string& binaryStr) {
    // 預定義的二進制到十六進制映射
    std::unordered_map<std::string, char> binToHex = {
        {"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'}
    };
    
    std::string result;
    std::string paddedBinary = binaryStr;
    
    // 在二進制字符串前面補0,使其長度成為4的倍數(shù)
    int remainder = paddedBinary.length() % 4;
    if (remainder != 0) {
        paddedBinary = std::string(4 - remainder, '0') + paddedBinary;
    }
    
    // 每4位一組進行轉換
    for (size_t i = 0; i < paddedBinary.length(); i += 4) {
        std::string group = paddedBinary.substr(i, 4);
        result += binToHex[group];
    }
    
    return result;
}

使用示例:

#include <iostream>

int main() {
    std::string binary1 = "1101";           // 二進制 1101
    std::string binary2 = "101011";         // 二進制 101011
    std::string binary3 = "111100001010";   // 二進制 111100001010
    
    std::cout << binary1 << " -> " << binaryToHex(binary1) << std::endl;  // 輸出: D
    std::cout << binary2 << " -> " << binaryToHex(binary2) << std::endl;  // 輸出: 2B
    std::cout << binary3 << " -> " << binaryToHex(binary3) << std::endl;  // 輸出: F0A
    
    return 0;
}

如果你想要一個更簡潔的版本,也可以使用位運算的方法:

#include <string>
#include <sstream>

std::string binaryToHexBitwise(const std::string& binaryStr) {
    // 先將二進制字符串轉換為整數(shù)
    unsigned long long decimal = 0;
    for (char c : binaryStr) {
        decimal = (decimal << 1) | (c - '0');
    }
    
    // 再將整數(shù)轉換為十六進制字符串
    std::stringstream ss;
    ss << std::hex << std::uppercase << decimal;
    
    return ss.str();
}

注意事項:

  • 第一個方法使用查表法,適合處理任意長度的二進制字符串
  • 第二個方法使用位運算,更簡潔但可能受限于整數(shù)類型的最大長度
  • 兩個函數(shù)都會自動處理前導零的情況
  • 輸出使用大寫字母(A-F),如果需要小寫字母,可以將映射中的字母改為小寫

選擇哪種方法取決于你的具體需求:

  • 如果需要處理很長的二進制字符串,建議使用第一種方法
  • 如果二進制字符串長度在64位以內,第二種方法更簡潔高效

以下是一個將十六進制字符串轉換為二進制字符串的C++函數(shù):

#include <string>
#include <unordered_map>

std::string hexToBinary(const std::string& hexStr) {
    // 預定義的十六進制到二進制映射
    std::unordered_map<char, std::string> hexToBin = {
        {'0', "0000"}, {'1', "0001"}, {'2', "0010"}, {'3', "0011"},
        {'4', "0100"}, {'5', "0101"}, {'6', "0110"}, {'7', "0111"},
        {'8', "1000"}, {'9', "1001"}, {'A', "1010"}, {'B', "1011"},
        {'C', "1100"}, {'D', "1101"}, {'E', "1110"}, {'F', "1111"},
        {'a', "1010"}, {'b', "1011"}, {'c', "1100"}, {'d', "1101"},
        {'e', "1110"}, {'f', "1111"}
    };
    
    std::string result;
    
    for (char c : hexStr) {
        // 跳過空格等無關字符
        if (c == ' ' || c == '\t' || c == '\n') {
            continue;
        }
        
        // 檢查是否為有效的十六進制字符
        if (hexToBin.find(c) != hexToBin.end()) {
            result += hexToBin[c];
        } else {
            // 如果遇到無效字符,可以拋出異常或返回空字符串
            throw std::invalid_argument("Invalid hexadecimal character: " + std::string(1, c));
            // 或者返回空字符串:return "";
        }
    }
    
    // 移除前導零(可選)
    size_t firstOne = result.find_first_not_of('0');
    if (firstOne != std::string::npos) {
        result = result.substr(firstOne);
    } else {
        // 如果全是零,返回"0"
        result = "0";
    }
    
    return result;
}

使用示例:

#include <iostream>
#include <stdexcept>

int main() {
    try {
        std::string hex1 = "D";      // 十六進制 D
        std::string hex2 = "2B";     // 十六進制 2B
        std::string hex3 = "F0A";    // 十六進制 F0A
        std::string hex4 = "1F";     // 十六進制 1F
        
        std::cout << hex1 << " -> " << hexToBinary(hex1) << std::endl;  // 輸出: 1101
        std::cout << hex2 << " -> " << hexToBinary(hex2) << std::endl;  // 輸出: 101011
        std::cout << hex3 << " -> " << hexToBinary(hex3) << std::endl;  // 輸出: 111100001010
        std::cout << hex4 << " -> " << hexToBinary(hex4) << std::endl;  // 輸出: 11111
        
        // 測試小寫字母
        std::cout << "a" << " -> " << hexToBinary("a") << std::endl;    // 輸出: 1010
        
    } catch (const std::exception& e) {
        std::cout << "Error: " << e.what() << std::endl;
    }
    
    return 0;
}

如果你想要一個不使用異常處理的版本:

#include <string>
#include <unordered_map>

std::string hexToBinarySafe(const std::string& hexStr) {
    std::unordered_map<char, std::string> hexToBin = {
        {'0', "0000"}, {'1', "0001"}, {'2', "0010"}, {'3', "0011"},
        {'4', "0100"}, {'5', "0101"}, {'6', "0110"}, {'7', "0111"},
        {'8', "1000"}, {'9', "1001"}, {'A', "1010"}, {'B', "1011"},
        {'C', "1100"}, {'D', "1101"}, {'E', "1110"}, {'F', "1111"},
        {'a', "1010"}, {'b', "1011"}, {'c', "1100"}, {'d', "1101"},
        {'e', "1110"}, {'f', "1111"}
    };
    
    std::string result;
    
    for (char c : hexStr) {
        if (c == ' ' || c == '\t' || c == '\n') {
            continue;
        }
        
        auto it = hexToBin.find(c);
        if (it != hexToBin.end()) {
            result += it->second;
        } else {
            // 遇到無效字符時返回空字符串
            return "";
        }
    }
    
    // 處理全零的情況
    if (result.empty()) {
        return "0";
    }
    
    // 移除前導零
    size_t firstOne = result.find_first_not_of('0');
    if (firstOne != std::string::npos) {
        result = result.substr(firstOne);
    } else {
        result = "0";
    }
    
    return result;
}

函數(shù)特點:

  • 大小寫支持:同時支持大寫和小寫十六進制字符
  • 空格處理:自動跳過空格、制表符和換行符
  • 錯誤處理:提供異常處理和安全返回兩種方式
  • 前導零處理:可選是否移除前導零
  • 完整性:每個十六進制字符轉換為4位二進制

注意事項:

  • 如果需要保留前導零,可以注釋掉移除前導零的代碼部分
  • 可以根據(jù)需要調整錯誤處理策略(拋出異?;蚍祷靥囟ㄖ担?/li>
  • 函數(shù)會驗證輸入的有效性,確保只處理合法的十六進制字符

到此這篇關于C++實現(xiàn)二進制字符串與十六進制字符串相互轉換的文章就介紹到這了,更多相關C++進制字符串轉換內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Prim(普里姆)算法求最小生成樹的思想及C語言實例講解

    Prim(普里姆)算法求最小生成樹的思想及C語言實例講解

    Prim算法能夠在帶權的圖中搜索出最小生成樹,這也是各大ACM和面試及考研題目中的熱點,下面我們就來詳細看一下Prim(普里姆)算法求最小生成樹的思想及C語言實例講解
    2016-06-06
  • C++獲取GPU顯卡信息的示例代碼

    C++獲取GPU顯卡信息的示例代碼

    這篇文章主要為大家詳細介紹了如何使用C++獲取GPU顯卡信息,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2024-02-02
  • C語言深入淺出解析二叉樹

    C語言深入淺出解析二叉樹

    二叉樹可以簡單理解為對于一個節(jié)點來說,最多擁有一個上級節(jié)點,同時最多具備左右兩個下級節(jié)點的數(shù)據(jù)結構。本文將詳細介紹一下C++中二叉樹的實現(xiàn)和遍歷,需要的可以參考一下
    2022-03-03
  • C++類成員指針的實現(xiàn)示例

    C++類成員指針的實現(xiàn)示例

    類成員指針是指向類成員的特殊指針,與普通指針不同,它存儲的是成員在類中的偏移量,而非直接內存地址,下面就來介紹一下C++類成員指針的使用,感興趣的可以了解一下
    2026-02-02
  • C語言實現(xiàn)strlen的三種方法小結

    C語言實現(xiàn)strlen的三種方法小結

    本文主要介紹了C語言實現(xiàn)strlen的三種方法小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • C語言中結構體、聯(lián)合體的成員內存對齊情況

    C語言中結構體、聯(lián)合體的成員內存對齊情況

    這篇文章主要給大家介紹了關于C語言中結構體、聯(lián)合體的成員內存對齊情況的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • C++?ASIO實現(xiàn)異步套接字管理詳解

    C++?ASIO實現(xiàn)異步套接字管理詳解

    Boost?ASIO(Asynchronous?I/O)是一個用于異步I/O操作的C++庫,該框架提供了一種方便的方式來處理網絡通信、多線程編程和異步操作,本文介紹了如何通過ASIO框架實現(xiàn)一個簡單的異步網絡套接字應用程序,需要的可以參考下
    2023-08-08
  • C++讀取INI配置文件類實例詳解

    C++讀取INI配置文件類實例詳解

    這篇文章主要介紹了C++讀取INI配置文件類的實現(xiàn)方法,需要的朋友可以參考下
    2014-07-07
  • C++和python實現(xiàn)單鏈表及其原理

    C++和python實現(xiàn)單鏈表及其原理

    這篇文章主要介紹了C++和python實現(xiàn)單鏈表及其原理,單鏈表是鏈表家族中的一員,每個節(jié)點依舊由數(shù)據(jù)域(data)和指針域(next)組成,鏈表的具體概念下面文章將詳細介紹,需要的小伙伴可以參考一下
    2022-03-03
  • DSP中浮點轉定點運算--舉例及編程中的心得

    DSP中浮點轉定點運算--舉例及編程中的心得

    本文主要講解DSP浮點轉定點運算舉例及編程中的心得 ,具有參考價值,需要的朋友可以參考一下。
    2016-06-06

最新評論

利辛县| 马尔康县| 韶关市| 德化县| 滦南县| 定襄县| 水富县| 赤城县| 大渡口区| 永吉县| 利辛县| 巴马| 格尔木市| 察雅县| 山西省| 辉县市| 湄潭县| 喀什市| 永福县| 丰县| 铁力市| 和田市| 漠河县| 永丰县| 怀远县| 通化县| 措美县| 西乡县| 南江县| 南通市| 荆门市| 房山区| 皋兰县| 太仆寺旗| 奉新县| 六枝特区| 抚松县| 尉氏县| 绍兴市| 宁强县| 富民县|