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/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

发表回复

登录后才能评论