C++Hex——一個全能的16進制操作工具庫

一、C++Hex是什麼

C++Hex是一個全能的16進制操作工具庫,可以方便地進行對16進制數據的處理,包括16進制編解碼、16進制字符串轉化為二進制數據、十六進制數與其他進制數之間的轉換等。

在現代軟件開發中,十六進制數據的處理具有重要的作用,所以C++Hex這個工具庫有助於提高程序開發效率。

二、C++Hex主要功能

C++Hex庫中的主要功能如下:

1.將16進制字符串轉化為二進制數據

2.將二進制數據轉化為16進制字符串

3.將16進制字符串轉化為十進制數

4.將十進制數轉化為16進制字符串

5.將16進制字符串轉化為ASCII字符串

6.將ASCII字符串轉化為16進制字符串

7.計算校驗和

三、C++Hex使用示例

#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <algorithm>
#include <iomanip>
#include <ctype.h>
using namespace std;

//十六進制字符串轉化為二進制數據
vector<char> hexStrToBytes(const string& hexStr) {
    vector<char> bytes;
    for (size_t idx = 0; idx < hexStr.size(); idx += 2) {
        unsigned int byte;
        stringstream ss;
        ss << hex << hexStr.substr(idx, 2);
        ss >> byte;
        bytes.push_back(static_cast<char>(byte));
    }
    return bytes;
}

//計算校驗和
unsigned char calcChecksum(const vector<char>& bytes) {
    unsigned char checksum = 0;
    for (auto byte : bytes) {
        checksum ^= static_cast<unsigned char>(byte);
    }
    return checksum;
}

//二進制數據轉化為十六進制字符串
string bytesToHexStr(const vector<char>& bytes) {
    std::stringstream ss;
    ss << hex;
    for (auto byte : bytes) {
        ss << setw(2) << setfill('0') << static_cast<unsigned int>(static_cast<unsigned char>(byte));
    }
    return ss.str();
}

int main(int argc, char* argv[])
{
    string hexStr = "16DAAD2F3C23";
    vector<char> bytes = hexStrToBytes(hexStr);
    unsigned char checksum = calcChecksum(bytes);
    string checksumHexStr = bytesToHexStr({ checksum });

    cout << "Hex string: " << hexStr << "\n";
    cout << "Checksum: " << setw(2) << setfill('0') << static_cast<unsigned int>(checksum) << "\n";
    cout << "Checksum (hex): " << checksumHexStr << "\n";

    return 0;
}

四、C++Hex的功能拓展

基於C++Hex庫的基礎上可以進行拓展,例如計算CRC校驗碼,將16進制數據轉化為其他進制的數值等操作。

主要的代碼修改如下:

//計算CRC校驗碼
unsigned short calcCrc(const vector<char>& bytes) {
    unsigned short crc = 0xFFFF;
    for (auto byte : bytes) {
        crc ^= static_cast<unsigned char>(byte);
        for (size_t bitIndex = 0; bitIndex < 8; bitIndex++) {
            crc = (crc & 0x0001) ? ((crc >> 1) ^ 0xA001) : (crc >> 1);
        }
    }
    return crc;
}

//將16進制字符串轉化為十六進制數
int hexToInt(const string& hexStr) {
    int num;
    stringstream ss;
    ss << hex << hexStr;
    ss >> num;
    return num;
}

//將十六進制數轉化為十進制數
int hexToDec(const string& hexStr) {
    return static_cast<int>(strtol(hexStr.c_str(), nullptr, 16));
}

int main(int argc, char* argv[])
{
    string hexStr = "16DAAD2F3C23";
    vector<char> bytes = hexStrToBytes(hexStr);
    unsigned char checksum = calcChecksum(bytes);
    string checksumHexStr = bytesToHexStr({ checksum });
    unsigned short crc = calcCrc(bytes);
    int hexNum = hexToInt(hexStr);
    int decNum = hexToDec(hexStr);

    cout << "Hex string: " << hexStr << "\n";
    cout << "Checksum: " << setw(2) << setfill('0') << static_cast<unsigned int>(checksum) << "\n";
    cout << "Checksum (hex): " << checksumHexStr << "\n";
    cout << "CRC: " << hex << setw(4) << setfill('0') << crc << "\n";
    cout << "Hex num: " << hexNum << "\n";
    cout << "Dec num: " << decNum << "\n";
    return 0;
}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/204435.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-07 12:17
下一篇 2024-12-07 12:17

相關推薦

  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python棧操作用法介紹

    如果你是一位Python開發工程師,那麼你必須掌握Python中的棧操作。在Python中,棧是一個容器,提供後進先出(LIFO)的原則。這篇文章將通過多個方面詳細地闡述Pytho…

    編程 2025-04-29
  • Python操作數組

    本文將從多個方面詳細介紹如何使用Python操作5個數組成的列表。 一、數組的定義 數組是一種用於存儲相同類型數據的數據結構。Python中的數組是通過列表來實現的,列表中可以存放…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL數據庫 在使用Python操作MySQL之前,我們需要先連接MySQL數據庫。在Python中,我…

    編程 2025-04-29
  • Python磁盤操作全方位解析

    本篇文章將從多個方面對Python磁盤操作進行詳細闡述,包括文件讀寫、文件夾創建、刪除、文件搜索與遍歷、文件重命名、移動、複製、文件權限修改等常用操作。 一、文件讀寫操作 文件讀寫…

    編程 2025-04-29
  • Python代碼實現迴文數最少操作次數

    本文將介紹如何使用Python解決一道經典的迴文數問題:給定一個數n,按照一定規則對它進行若干次操作,使得n成為迴文數,求最少的操作次數。 一、問題分析 首先,我們需要了解迴文數的…

    編程 2025-04-29
  • 如何通過jstack工具列出假死的java進程

    假死的java進程是指在運行過程中出現了某些問題導致進程停止響應,此時無法通過正常的方式關閉或者重啟該進程。在這種情況下,我們可以藉助jstack工具來獲取該進程的進程號和線程號,…

    編程 2025-04-29
  • 註冊表取證工具有哪些

    註冊表取證是數字取證的重要分支,主要是獲取計算機系統中的註冊表信息,進而分析痕迹,獲取重要證據。本文將以註冊表取證工具為中心,從多個方面進行詳細闡述。 一、註冊表取證工具概述 註冊…

    編程 2025-04-29
  • Python元祖操作用法介紹

    本文將從多個方面對Python元祖的操作進行詳細闡述。包括:元祖定義及初始化、元祖遍歷、元祖切片、元祖合併及比較、元祖解包等內容。 一、元祖定義及初始化 元祖在Python中屬於序…

    編程 2025-04-29
  • 如何用Python對數據進行離散化操作

    數據離散化是指將連續的數據轉化為離散的數據,一般是用於數據挖掘和數據分析中,可以幫助我們更好的理解數據,從而更好地進行決策和分析。Python作為一種高效的編程語言,在數據處理和分…

    編程 2025-04-29

發表回復

登錄後才能評論