读书人

string转换成unsiged char解决办法

发布时间: 2012-04-12 15:46:35 作者: rapoo

string转换成unsiged char
我有一个文件,里面存的是string类型的文本,没行的内容如:“a3275d7f”,“7A4DFF90”,实际上是十六进制数的字符串表示。
我想每读两位就将其转换成一个unsiged char格式。也就是说,将其真正的转换成16进制数。
如何实现?

新人,虚心求教,感谢感谢!请给比较完整的代码。

[解决办法]
读取格式应该可以设置,使用fscanf。
int fscanf(FILE *stream, char *format,[argument...]);

http://baike.baidu.com/view/656694.html?wtp=tt

格式字符说明
  %x %X: 读入十六进制整数.
[解决办法]

C/C++ code
unsigned int ascvnum(char cp){    if (cp >= 'a')    {        return cp - 'a' + 10;    }    if (cp >= 'A')    {        return cp - 'A' + 10;    }    return cp - '0';}unsigned int strtoint(const char* szval){    char cp = 0;    unsigned int uiret = 0;    while (cp = *szval++)    {        uiret *= 16;        uiret += ascvnum(cp);    }    return uiret;}int main(){       printf("%08x\n",strtoint("7A4DFF90"));    getchar();    return 0;}
[解决办法]
C/C++ code
#include "stdafx.h"#include <Windows.h>#include <iostream>#include <string>using namespace std;int main(int argc, char* argv[]){    string str[] =    {        "a3275d7f",        "7A4DFF90"    };    char buf[3] = {0};    BYTE bData = 0;    int nIndex = 0;    for(int i=0; i<sizeof(str)/sizeof(str[0]); i++)    {        nIndex = 0;        const char* pTmp = str[i].c_str();        for(int j=0; j<strlen(pTmp); j++)        {            if(2 == nIndex)            {                bData = strtoul(buf, NULL, 16);                printf("0x%x ", bData);                nIndex = 0;            }            buf[nIndex++] = pTmp[j];        }        bData = strtoul(buf, NULL, 16);        printf("0x%x\n", bData);    }    return 0;}
[解决办法]
C/C++ code
#include <iostream>#include <fstream>#include <string>#include <vector>using namespace std;/**@brief text read and write */const int iRule = 2;const int MaxCount = 100;//#define MyStr vector<string>//#define MyNum vector<unsigned char>typedef vector<string> MyStr;typedef vector<unsigned char> MyNum;class CreadAndWrite{public:    CreadAndWrite()    {}    ~CreadAndWrite()    {}    bool readTxAndSetV(string FilePath);    string*& splitstr(string str);    void ConvertToNum();    void printValue();private:    MyStr m_mystr;    MyNum m_mynum;};/**按每2个字节进行截取。返回数组 */string*& CreadAndWrite::splitstr(string str){    cout<<"enter function splitstr "<<endl;    string *returnstr = new string[MaxCount];    cout<<"截取的字符串的长度为"<<str.length()<<endl;    int count = 0;    for(int i = 0; i <= str.length()-2; i+=2)    {                returnstr[count] = str.substr(i,iRule);        cout<<returnstr[count]<<endl;        ++count;    }    cout<<"exit function splitstr "<<endl;    return returnstr;}bool CreadAndWrite::readTxAndSetV(string FilePath){    ifstream in(FilePath.c_str());    if(!in)    {        return false;    }    string readline;    while(getline(in,readline))    {        m_mystr.push_back(readline);        cout<<readline<<endl;    }    return true;}void CreadAndWrite::ConvertToNum(){    for(MyStr::iterator iter = m_mystr.begin();iter != m_mystr.end(); iter++)    {        cout<<"enter funtion ConvertToNum"<<endl;        string stmp = *iter;        string* ptmp = splitstr(stmp);        cout<<ptmp[0]<<endl;        cout<<ptmp[1]<<endl;        cout<<ptmp[2]<<endl;        cout<<ptmp[3]<<endl;        cout<<"start push_back string and print it"<<endl;        for(int i = 0; i < stmp.length() / 2; i++)        {            //m_mynum.push_back(atoi( (ptmp[i].c_str()) ));            m_mynum.push_back( strtoul(ptmp[i].c_str(), NULL, 16) );            cout<<(ptmp[i].c_str())<<endl;        }         cout<<"end push_back string and print it"<<endl;        delete []ptmp;    }    cout<<"exit function ConvertToNum "<<endl;    }void CreadAndWrite::printValue(){    cout<<"转化的十六进制有"<<m_mynum.size()<<endl;    cout<<"转化成功的字符为"<<endl;    for(MyNum::iterator iter = m_mynum.begin();iter != m_mynum.end(); iter++)    {         //cout<<*iter<<endl;        printf("0x%x\n", *iter);    }}int main(){  string FilePath= "context.txt";  CreadAndWrite _caw;  if(!_caw.readTxAndSetV(FilePath))  {      cout<<"文件不存在!"<<endl;      return 1;  }  _caw.ConvertToNum();   _caw.printValue();   return 0;} 

读书人网 >C++

热点推荐