前言:整数转16进制字符串,网上大部分的资料都是要传入16进制字符串的位数,有点麻烦。本文介绍的方法自动确定返回的字符串的位数,最终返回位数为偶数位。偶数位方便使用时转成字节数组(unsigned char[]),这样就可以传输了。
一、大/小端形式的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进制字符串文章来源:https://www.toymoban.com/news/detail-622150.html
// 整型转化成大端/小端形式的16进制,返回值长度为偶数位
string intToHexStr(int mask, bool isBigEdian) {
// 最终16进制字符串长度为偶数
int hexLen = 0;
if (mask > INT_MAX) {
return "00";
}
// 根据数值的大小决定16进制字符串的个数
for (int i = 2; i <= 6; i += 2) {
string hex = "";
for (int j = 0; j < i; j++) {
hex += "F";
}
if (mask <= hexStrToInt(hex, true)) {
hexLen = i;
break;
}
}
// 最长8位, INT_MAX = 2147483647, 16进制字符串为:7FFFFFFF
if (hexLen == 0) {
hexLen = 8;
}
//16进制字符集
string hexes[16] = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
string hexstring = "";
for (int i = 0; i < hexLen; i++){
int j = hexLen - i - 1;
// 按顺序取4bit数
int number = (mask >> 4 * j) & 0xf;
hexstring += hexes[number];
}
// 默认是大端的
string result = hexstring;
// 转大端为小端
if (!isBigEdian) {
result = "";
// 按字节掉转顺序,例如 0A00-->000A
for (int i = hexstring.length() - 2; i >= 0; i -= 2) {
result += hexstring.substr(i, 2);
}
}
return result;
}
整型转16进制字符串有参考这篇文章:2021.9.9 解决c++整数转化为16进制字符串问题_MoonByulStar的博客-CSDN博客_c++整型转16进制 文章来源地址https://www.toymoban.com/news/detail-622150.html
到了这里,关于C++ 整型转16进制字符串或16进制字符串转整型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!