前言:整数转16进制字符串,网上大部分的资料都是要传入16进制字符串的位数,有点麻烦。本文介绍的方法自动确定返回的字符串的位数,最终返回位数为偶数位。偶数位方便使用时转成字节数组(unsigned char[]),这样就可以传输了。
需要包含的c++库
#include <sstream>
#include <iomanip>
#include <iostream>
一、大/小端形式的16进制字符串转整型
// 大端/小端形式的16进制字符串转整型,参数hexStr长度必须为2的倍数
int hexStrToInt(string hexStr, bool isBigEdian)
{
if (hexStr.length() < 2 || hexStr.length() % 2 != 0) {
return 0;
}
string bigEdianStr = hexStr;
// 先将小端字符串转大端字符串
if (!isBigEdian) {
bigEdianStr = "";
// 按字节掉转顺序,例如 0A00-->000A
for (int i = hexStr.length() - 2; i >= 0; i -= 2) {
bigEdianStr += hexStr.substr(i, 2);
}
}
return stoi(bigEdianStr, 0, 16);
}
二、整型(支持负数)转大/小端形式的16进制字符串
// 整型(支持负整数)转化成大端/小端形式的16进制,返回值长度为偶数位,参数为负整数时,固定返回4字节的16进制字符串
string intToHexStr(int mask, bool isBigEdian) {
if (mask > INT_MAX || mask < INT_MIN) {
return "00";
}
std::stringstream ss;
ss << std::hex << mask;
string hexstring = ss.str();
// 结果字符串的长度为最短偶数位
string shortestEvenNumberHex = "";
// 偶数的长度,且前面没有多余的0
if (hexstring.length() % 2 == 0) {
shortestEvenNumberHex = hexstring;
} else {
shortestEvenNumberHex = "0" + hexstring;
}
// 默认是大端的
string result = shortestEvenNumberHex;
// 转大端为小端
if (!isBigEdian) {
result = "";
// 按字节掉转顺序,例如 0A00-->000A
for (int i = shortestEvenNumberHex.length() - 2; i >= 0; i -= 2) {
result += shortestEvenNumberHex.substr(i, 2);
}
}
// 字母转大写
toUpperCase(result);
return result;
}
字母转换成大写的方法:
void toUpperCase(string &str)
{
for(char& c : str) {
if(c >= 'a' && c <= 'z') {
c = c - 'a' + 'A';
}
}
}
2024.4.18,使用更简单的c++自带方法转化,增加字母转大写方法和需要引入的库。