一、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