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

C++如何將十六進制字符串轉換為二進制字符串

 更新時間:2023年08月02日 08:35:59   作者:花好約猿上王者  
這篇文章主要介紹了C++如何將十六進制字符串轉換為二進制字符串問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

十六進制字符串轉換為二進制字符串

一種簡單的方法將十六進制字符串轉為二進制字符串,不限制十六進制的字節(jié)數(shù)。

源代碼

傳入的十六進制字符串需要轉換為大寫!(%X, toupper())。

string GetBinaryStringFromHexString (string strHex)
{
    string sReturn = "";
    unsigned int len = strHex.length();
    for (unsigned int i = 0; i<len; i++)
    {
        switch ( strHex[i])
        {
            case '0': sReturn.append ("0000"); break;
            case '1': sReturn.append ("0001"); break;
            case '2': sReturn.append ("0010"); break;
            case '3': sReturn.append ("0011"); break;
            case '4': sReturn.append ("0100"); break;
            case '5': sReturn.append ("0101"); break;
            case '6': sReturn.append ("0110"); break;
            case '7': sReturn.append ("0111"); break;
            case '8': sReturn.append ("1000"); break;
            case '9': sReturn.append ("1001"); break;
            case 'A': sReturn.append ("1010"); break;
            case 'B': sReturn.append ("1011"); break;
            case 'C': sReturn.append ("1100"); break;
            case 'D': sReturn.append ("1101"); break;
            case 'E': sReturn.append ("1110"); break;
            case 'F': sReturn.append ("1111"); break;
        }
    }
    return sReturn;
}

十六進制字符串轉二進制字符串1的個數(shù)

優(yōu)化版

建立十六進制字符串 字符“0-F” 對應二進制中1的個數(shù)的映射數(shù)組

代碼如下:

#include<iostream>
#include<string>
using namespace std;
int main(){
    string inputHex;
    cin >> inputHex;
    int bitOneNumber[16] = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4};
    inputHex = inputHex.substr(2);
    int cnt = 0;
    for(auto ch : inputHex){
        if(ch >= '0' && ch <= '9')
            cnt += bitOneNumber[ch - '0'];
        else if(ch >= 'a' && ch <= 'f')
            cnt += bitOneNumber[ch - 'a' + 10];
        else
            return -1;
    }
    cout << cnt <<  endl;
    system("pause");
    return 0;
}

十六進制字符串轉為二進制字符串

遍歷統(tǒng)計1的個數(shù)

#include<iostream>
#include<string>
using namespace std;
string HexStrToBinStr(string& inputHex){
    string binStr;
    for(auto ch : inputHex){
        switch (ch)
        {
        case '0' : binStr += "0000"; break;
        case '1' : binStr += "0001"; break;
        case '2' : binStr += "0010"; break;
        case '3' : binStr += "0011"; break;
        case '4' : binStr += "0100"; break;
        case '5' : binStr += "0101"; break;
        case '6' : binStr += "0110"; break;
        case '7' : binStr += "0111"; break;
        case '8' : binStr += "1000"; break;
        case '9' : binStr += "1001"; break;
        case 'a' : binStr += "1010"; break;
        case 'b' : binStr += "1011"; break;
        case 'c' : binStr += "1100"; break;
        case 'd' : binStr += "1101"; break;
        case 'e' : binStr += "1110"; break;
        case 'f' : binStr += "1111"; break;
        default:
            break;
        }
    }
    return binStr;
}
int main(){
    string inputHex;
    cin >> inputHex;
    inputHex = inputHex.substr(2);
    string binStr = HexStrToBinStr(inputHex);
    int cnt = 0;
    for(auto ch : binStr)
        if(ch == '1')
            ++cnt;
    cout << cnt << endl;
    cout << binStr << endl;
    system("pause");
    return 0;
}

二進制字符串轉十進制字符串

#include<iostream>
#include<string>
using namespace std;
//十六進制字符串串轉二進制
string HexStrToBinStr(string& inputHex){
    string binStr;
    for(auto ch : inputHex){
        switch (ch)
        {
        case '0' : binStr += "0000"; break;
        case '1' : binStr += "0001"; break;
        case '2' : binStr += "0010"; break;
        case '3' : binStr += "0011"; break;
        case '4' : binStr += "0100"; break;
        case '5' : binStr += "0101"; break;
        case '6' : binStr += "0110"; break;
        case '7' : binStr += "0111"; break;
        case '8' : binStr += "1000"; break;
        case '9' : binStr += "1001"; break;
        case 'a' : binStr += "1010"; break;
        case 'b' : binStr += "1011"; break;
        case 'c' : binStr += "1100"; break;
        case 'd' : binStr += "1101"; break;
        case 'e' : binStr += "1110"; break;
        case 'f' : binStr += "1111"; break;
        default:
            break;
        }
    }
    return binStr;
}
//二進制轉十進制
struct decStr{
    int len;
    char decstr[100000];
    decStr() : len(0){
        for(int i = 0; i < 100000; ++i)
            decstr[i] = 0;
    }
};
void addCurNumToDecStr(decStr& data, int num){
    for(int i = 0; i < data.len; ++i)
        data.decstr[i] *= 2;
    data.decstr[0] += num;
    for(int i = 0; i < data.len; ++i){
        data.decstr[i + 1] += data.decstr[i] / 10;
        data.decstr[i] %= 10;
    }
    if(data.decstr[data.len] != 0) ++data.len;
}
string assicTostr(decStr&data){
    string decstr;
    for(int i = data.len - 1; i >= 0; --i){
        decstr += data.decstr[i] + '0';
    }
    return decstr;
}
string BinStrToDecStr(string& binStr){
    decStr data;
    for(int i = 0; i < binStr.size(); ++i){
        addCurNumToDecStr(data, binStr[i] == '1' ? 1 : 0);    
    }
    string decstr = assicTostr(data);
    return decstr;
}
int main(){
    string inputHex;
    cin >> inputHex;
    inputHex = inputHex.substr(2);
    string binStr = HexStrToBinStr(inputHex);
    int cnt = 0;
    for(auto ch : binStr)
        if(ch == '1')
            ++cnt;
    cout << cnt << endl;
    cout << binStr << endl;
    string decstr = BinStrToDecStr(binStr);
    cout << decstr << endl;
    system("pause");
    return 0;
}

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • C語言進階幾分鐘帶你理解大小端存儲模式

    C語言進階幾分鐘帶你理解大小端存儲模式

    這篇文章主要為大家介紹了C語言進階大小端模式的示例詳解,帶各位讀者朋友五分鐘腳踩大小端模式,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-02-02
  • C語言各類操作符全面講解

    C語言各類操作符全面講解

    C?語言提供了豐富的操作符,有:算術操作符,移位操作符,位操作符,賦值操作符,單目操作符,關系操作符,邏輯操作符,條件操作符等。接下了讓我們詳細了解掌握它
    2022-05-05
  • C語言中strcpy()函數(shù)的具體實現(xiàn)及注意事項

    C語言中strcpy()函數(shù)的具體實現(xiàn)及注意事項

    C語言庫函數(shù)char *strcpy(char *dest, const char *src)把src所指向的字符串復制到dest,下面這篇文章主要給大家介紹了關于C語言中strcpy()函數(shù)的具體實現(xiàn)及注意事項的相關資料,需要的朋友可以參考下
    2022-11-11
  • C++中對象的賦值與復制操作詳細解析

    C++中對象的賦值與復制操作詳細解析

    對象之間的賦值也是通過賦值運算符“=”進行的。本來賦值運算符“=”只能用來對單個的變量賦值,現(xiàn)在被擴展為兩個同類對象之間的賦值,這是通過對賦值運算符的重載實現(xiàn)的
    2013-10-10
  • 一個string類的簡單實現(xiàn)案例

    一個string類的簡單實現(xiàn)案例

    下面小編就為大家?guī)硪黄粋€string類的簡單實現(xiàn)案例。小編覺得挺不錯的現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • OpenCV使用BSM統(tǒng)計視頻中移動的對象

    OpenCV使用BSM統(tǒng)計視頻中移動的對象

    這篇文章主要為大家詳細介紹了OpenCV如何使用BackgroundSubstractor(BSM)實現(xiàn)視頻中移動對象統(tǒng)計功能,文中的示例代碼講解詳細,需要的可以參考一下
    2023-02-02
  • C語言中settimeofday函數(shù)和gettimeofday函數(shù)的使用

    C語言中settimeofday函數(shù)和gettimeofday函數(shù)的使用

    這篇文章主要介紹了C語言中的settimeofday函數(shù)和gettimeofday函數(shù)的使用,注意settimeofday()函數(shù)只返回0和-1,需要的朋友可以參考下
    2015-08-08
  • C語言實現(xiàn)小學生隨機出題測試計分

    C語言實現(xiàn)小學生隨機出題測試計分

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)小學生隨機出題測試計分,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • 詳解C語言內(nèi)核字符串拷貝與比較

    詳解C語言內(nèi)核字符串拷貝與比較

    本文將探索一下字符串的拷貝與比較,與應用層不同內(nèi)核字符串拷貝與比較也需要使用內(nèi)核專用的API函數(shù),字符串的拷貝往往伴隨有內(nèi)核內(nèi)存分配,我們將首先簡單介紹內(nèi)核如何分配堆空間,然后再以此為契機簡介字符串的拷貝與比較
    2022-09-09
  • C語言實現(xiàn)電子郵件地址驗證程序

    C語言實現(xiàn)電子郵件地址驗證程序

    這篇文章主要介紹了C語言實現(xiàn)電子郵件地址驗證程序,利用的是POSIX正則表達式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-11-11

最新評論

承德县| 道孚县| 安仁县| 象山县| 扎鲁特旗| 阿巴嘎旗| 德庆县| 河池市| 肇源县| 大竹县| 青冈县| 安乡县| 西吉县| 云安县| 米脂县| 普兰店市| 台湾省| 邵阳县| 南华县| 洮南市| 九台市| 兴城市| 漳州市| 张家口市| 宿松县| 肃宁县| 连平县| 曲松县| 城市| 清涧县| 淄博市| 新安县| 梁山县| 昌图县| 临洮县| 九寨沟县| 枝江市| 滨海县| 尉犁县| 北海市| 临高县|