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

这篇具有很好参考价值的文章主要介绍了C++ 整型转16进制字符串或16进制字符串转整型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:整数转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进制字符串

// 整型转化成大端/小端形式的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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 字符串string转换长整型int(八进制、十进制、十六进制)

    strtoul() 是C语言标准库中用于将字符串转换成无符号长整数的函数。它的完整原型如下: 其中, nptr 代表要被转换成无符号长整数的字符串; endptr 是一个指向字符指针的指针,该指针指向已经转换了的最后一个字符的下一个位置; base 指定要采用的进制,范围是2 ~ 36。 该函

    2024年02月07日
    浏览(54)
  • C# 数据互转 16进制&16进制字符串&字符串

    提取字符串:在C# .net开发中 “ToString()”方法是最常见的,用于将文本转为字符串; 字符串过滤:在处理字符串数据或者hex数据时,一般都需要去掉 空格 数组标识0x 标点符号 等等字符,方便后续进一步处理; 从字符串转16进制数组,字符串的每一个字符就是一个byte; 可以

    2023年04月08日
    浏览(108)
  • 汇编和c++初学,c++字符串加整型,导致的字符串偏移

    从汇编角度分析\\\"helloworld\\\"+1 “helloworld”+1对应 eax地址偏移加了1, 最终取的内存偏移地址,所以此时的test是elloword,后面调用iostream封装的字符串相加方法。 最终结果是 做的前端,如果是js,1会转换为字符串后相加,最近刚学c++和汇编,目前还是一知半解的,如有不对,请指

    2024年01月16日
    浏览(48)
  • JS十六进制转浮点、字符串转为ArrayBuffer、ArrayBuffer转16进制字符串、16进制转10进制、crc校验位、十六进制转中文字符串(小程序、浏览器)、十六进制字符串转ascall字串

    h5实现一键复制文本到剪切板 ArrayBuffer转16进制字符串: 字符串转为ArrayBuffer对象 十六进制转10进制 浮点型转十六进制: 将某段字符串使用某字符补齐 十六进制转带符号(-负号)整型 带符号(负号)整数转十六进制字符串(得到8个字符十六进制字符串) 带符号(负号)整数转

    2024年02月09日
    浏览(54)
  • 【C语言小技巧】16进制字符串与字符串互转

    平时我们在写功能需求时,难免不会遇到需要将 16 进制字符串转换成字符串,或者字符串转16进制字符串的需求,所以就有了这篇文章。 在进入主题之前,我们先来回顾一下字符和 16 进制的关系。我们知道正常的 16 进制数值(像 0x32 )和 ASIIC 码( 0x32 对应字符 2 )之间是互

    2024年02月02日
    浏览(58)
  • MFC 编辑框输入16进制字符串转换为16进制数或者10进制数据计算

    1. 编辑框添加变量,并选择变量类型为CString。     CString m_strReg;        DDX_Text(pDX, IDC_EDIT_REG, m_strReg); 2. 使用“strtoul”或“_tcstoul”函数将Cstring 类型转换为16进制/10进制数进行计算。     CString tmp;     UpdateData(TRUE);     UpdateData(FALSE);          OutputDebugString(m_strReg);  

    2024年02月16日
    浏览(59)
  • C语言字符串转换为16进制

    方法二:自定义转换函数 输出结果: 这两种方法都可以将C语言字符串逐个字符转换为对应的16进制表示。第一种方法使用了sprintf函数来格式化输出,第二种方法则是通过强制类型转换将字符转换为无符号字符(unsigned char),然后使用printf函数输出对应的十六进制表示。

    2024年02月05日
    浏览(59)
  • 【byte类型数据转换16进制字符串】

    1.byte类型数据长度为8bit(8位), 例如00101110。 2.16进制字符长度4bit(4位), 例如1101,表示D。 3.那么一个byte可以用2(8bit/4bit=2)个16进制字符表示。 4. 1中的00101110可分为0010和1110两部分。 5. 0010可以由00101110右移动4位获得,即001011104。注意,在java中byte是无符号的,全为正的,所有应该做

    2024年02月16日
    浏览(55)
  • C语言二进制数据和16进制字符串互转

    知识点:结构体中的“伸缩型数组成员”(C99新增) C99新增了一个特性:伸缩型数组成员(flexible array member),利用这项特性声明的结构,其最后一个数组成员具有一些特性。第1个特性是,该数组不会立即存在。第2个特性是,使用这个伸缩型数组成员可以编写合适的代码,就

    2024年02月13日
    浏览(45)
  • [C++]十六进制和字符串互相转化

    c4 :这个写法是将二进制右移四位,15的二进制是:00001111,右移四位得到0000;所以第一位为0; c15 :这个是将二进制和15的二进制进行位与运算:与运算是都是1才为1:00001111和00001111按位与得到00001111也就是lut[15] == E; 所以得到c为0E; 然后我们就得到了这一段非法字符的十六

    2024年02月15日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包