C++ 整型转16进制字符串或16进制字符串转整型

前言:整数转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++自带方法转化,增加字母转大写方法和需要引入的库。 

 

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值