栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++中长字符串如何转化为整型数处理

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++中长字符串如何转化为整型数处理

最近工作上遇到的一个问题,字符串需要转成十六进制数处理,例如:

“ABCD”字符串,实际需要用作0xABCD,来进行处理。

如果是短字符串,可以用C++支持的stoi函数来进行转换,例如:

string mystr = "ABC";

size_t index = 0;

int myintvalue = stoi(mystr, &index, 16); 

这里用16表示16进制,如果用10(或者默认就是10)将会抛出异常. 因为A无法用十进制进行转换。 但是这种方法也只是适用于短一点的字符串,长字符串会因为无法存储这么大的数据而报错。

首先C++中定义一个长字符串:

string mystr = "001607530ABBFF00FE8000D007010103112B";

然后可以把里面每一个字符强制转换(int),以第一个字符为例:

int myintvalue = (int)mystr[0];

但是把myintvalue值输出出来发现,为什么这个值是48,这是因为将字符强制转换整型获得的是该字符对应的ASCII值。 所以只需要将ASCII值和整型值对应起来处理即可,如下函数:

int convstrtoint(int myvalue)
{
    if (myvalue >= 65 && myvalue <= 70)  //转换A~F
    {
        myvalue -= 55;
    }
    else if (myvalue >= 48 && myvalue <= 57)  //转换0~9
    {
        myvalue -= 48;
    }
    else if (myvalue >= 97 && myvalue <= 102)  //转换a~f
    {
        myvalue -= 87;
    }
    else
    {
        std::cout << "Data is out of scrop"<< endl;
    }
    return myvalue;
}

我们可以用一个整型数组来存储由字符串转换过来的值,如下:

int* myintvalue = new [mystr.length()];

for (unsigned int i = 0; i < mystr.length(); i++)
{
        myintvalue[i] = convstrtoint((int)mystr[i]);
}

delete[] myintvalue;

myintvalue = nullptr;

上述过程也可以使用只能指针来完成,如下:

auto myintvalue = make_unique(mystr.length());

for (unsigned int i = 0; i < mystr.length(); i++)
{
        myintvalue[i] = convstrtoint((int)mystr[i]);
}

这样就不需要delete来释放内存了。

// 如果想把这样的整数型数组转换成相对应的十六进制字符串,先定义下面函数:

string convinttostr(int myvalue)
{
    string mychar;
    if (myvalue >= 0 && myvalue <= 9)
    {
        mychar = to_string(myvalue);
    }
    else if (myvalue >= 10 && myvalue <= 15)
    {
        switch (myvalue)
        {
        case 10:
            mychar = "A";
            break;
        case 11:
            mychar = "B";
            break;
        case 12:
            mychar = "C";
            break;
        case 13:
            mychar = "D";
            break;
        case 14:
            mychar = "E";
            break;
        case 15:
            mychar = "F";
            break;
        default:
            break;
        }
    }
    else
    {
        std::cout << "Data is out of scrop" << endl;
    }
    return mychar;
}

函数返回的是string行字符串,通过循环把所有的相加就构成了长字符串了,因为string型字符串支持+运算符的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/347448.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号