zoukankan      html  css  js  c++  java
  • Cstring转char、string、int等数据类型的方法(转载)

      1 Cstring转char、string、int等数据类型的方法
      2 (2010-01-08 16:06:14) 
      3  转载
      4 标签: 
      5 杂谈
      6 分类: VC 
      7 
      8 CString 转char *
      9 CString cstr;
     10 char *p = (LPSTR)(LPCTSTR)cstr;
     11 string 转 CString
     12 CString.format(”%s”, string.c_str());
     13 char 转 CString
     14 CString.format(”%s”, char*);
     15 charstring
     16 string s(char *);
     17 stringchar *
     18 char *p = string.c_str();
     19 CString 转 string
     20 string s(CString.GetBuffer());
     21 1string -> CString
     22 CString.format(”%s”, string.c_str());
     23 用c_str()确实比data()要好.
     24 2char -> string
     25 string s(char *);
     26 只能初始化,在不是初始化的地方最好还是用assign().
     27 3,CString -> string
     28 string s(CString.GetBuffer());
     29 GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.
     30 《C++标准函数库》中说的
     31 有三个函数可以将字符串的内容转换为字符数组和C―string
     32 1.data(),返回没有”0“的字符串数组
     33 2,c_str(),返回有”0“的字符串数组
     34 3,copy()
     35 ―――――――――――――――――――――
     36 CString与int、char*、char[100]之间的转换- -
     37 CString与int、char*、char[100]之间的转换- -
     38 CString互转int
     39 将字符转换为整数,可以使用atoi、_atoi64或atol。
     40 而将数字转换为CString变量,可以使用CString的Format函数。如
     41 CString s;
     42 int i = 64;
     43 s.Format(”%d”, i)
     44 Format函数的功能很强,值得你研究一下。
     45 void CStrDlg::OnButton1()
     46 {
     47 // TODO: Add your control notification handler code here
     48 CString
     49 ss=”1212.12″;
     50 int temp=atoi(ss);
     51 CString aa;
     52 aa.Format(”%d”,temp);
     53 AfxMessageBox(”var is ” + aa);
     54 }
     55 sart.Format(”%s”,buf);
     56 CString互转char*
     57 ///char * TO cstring
     58 CString strtest;
     59 char * charpoint;
     60 charpoint=”give string a value”;
     61 strtest=charpoint;
     62 ///cstring TO char *
     63 CString 转char *
     64 CString cstr;
     65 char *p = (LPSTR)(LPCTSTR)cstr;
     66 string 转 CString
     67 CString.format(”%s”, string.c_str());
     68 char 转 CString
     69 CString.format(”%s”, char*);
     70 charstring
     71 string s(char *);
     72 stringchar *
     73 char *p = string.c_str();
     74 CString 转 string
     75 string s(CString.GetBuffer());
     76 1string -> CString
     77 CString.format(”%s”, string.c_str());
     78 用c_str()确实比data()要好.
     79 2char -> string
     80 string s(char *);
     81 只能初始化,在不是初始化的地方最好还是用assign().
     82 3,CString -> string
     83 string s(CString.GetBuffer());
     84 GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.
     85 《C++标准函数库》中说的
     86 有三个函数可以将字符串的内容转换为字符数组和C―string
     87 1.data(),返回没有”0“的字符串数组
     88 2,c_str(),返回有”0“的字符串数组
     89 3,copy()
     90 ―――――――――――――――――――――
     91 CString与int、char*、char[100]之间的转换- -
     92 CString与int、char*、char[100]之间的转换- -
     93 CString互转int
     94 将字符转换为整数,可以使用atoi、_atoi64或atol。
     95 而将数字转换为CString变量,可以使用CString的Format函数。如
     96 CString s;
     97 int i = 64;
     98 s.Format(”%d”, i)
     99 Format函数的功能很强,值得你研究一下。
    100 void CStrDlg::OnButton1()
    101 {
    102 // TODO: Add your control notification handler code here
    103 CString
    104 ss=”1212.12″;
    105 int temp=atoi(ss);
    106 CString aa;
    107 aa.Format(”%d”,temp);
    108 AfxMessageBox(”var is ” + aa);
    109 }
    110 sart.Format(”%s”,buf);
    111 CString互转char*
    112 ///char * TO cstring
    113 CString strtest;
    114 char * charpoint;
    115 charpoint=”give string a value”;
    116 strtest=charpoint;
    117 ///cstring TO char *
    118 charpoint=strtest.GetBuffer(strtest.GetLength());
    119 标准C里没有string,char *==char []==string
    120 可以用CString.Format(”%s”,char *)这个方法来将char *转成CString。要把CString转成char *,用操作符(LPCSTR)CString就可以了。
    121 CString转换 char[100]
    122 char a[100];
    123 CString str(”aaaaaa”);
    124 strncpy(a,(LPCTSTR)str,sizeof(a));
    125 
    126 charpoint=strtest.GetBuffer(strtest.GetLength());
    127 标准C里没有string,char *==char []==string
    128 可以用CString.Format(”%s”,char *)这个方法来将char *转成CString。要把CString转成char *,用操作符(LPCSTR)CString就可以了。
    129 CString转换 char[100]
    130 char a[100];
    131 CString str(”aaaaaa”);
    132 strncpy(a,(LPCTSTR)str,sizeof(a));
    133 
    134 
    135 
    136 
    137 
    138 
    139 //将ASCII码转化为16进制数
    140 BYTE  ASCIIToHexChar(BYTE ch)
    141 {
    142     if((ch>='0')&&(ch<='9'))
    143    {
    144        return ch-0x30;
    145 
    146    }
    147 
    148     else if((ch>='A')&&(ch<='F'))
    149     {
    150        return ch-'A'+10;
    151      }
    152     else if((ch>='a')&&(ch<='f'))
    153     {
    154        return ch-'a'+10;  
    155     }      
    156     else
    157    {
    158        return -1;
    159    }
    160 }
    161 
    162  
    163 
    164 //将char转化为16进制
    165 
    166 char   CharToHexChar(char ch)
    167 {
    168     if((ch>='0')&&(ch<='9'))
    169    {
    170        return ch-0x30;
    171 
    172    }
    173 
    174     else if((ch>='A')&&(ch<='F'))
    175     {
    176        return ch-'A'+10;
    177      }
    178     else if((ch>='a')&&(ch<='f'))
    179     {
    180        return ch-'a'+10;  
    181     }      
    182     else
    183    {
    184        return -1;
    185    }
    186 }
    187 
    188  
    189 
    190 //16进制字符串CString 转为 BYTE[] 数组的方法
    191 
    192 BYTE[] StringToByteArray(CString str)
    193 
    194 {
    195 
    196 //CString str ="01 02 03 04";例如这样数据
    197  BYTE tmpByte = 0x00;
    198  int strLen = str.GetLength();
    199  BYTE cmd[1024]; //注意越界
    200  memset(cmd, '', sizeof(cmd));
    201  
    202  for (int i=0, j=0; i<sizeof(cmd),j<strLen; i++,j++)
    203  {
    204   if (str[j] == ' ')
    205   {
    206    ++j;
    207   }
    208   tmpByte = str[j];        
    209   cmd[i] = ASCIIToHexChar(tmpByte)<<4;//左移4位
    210   if (str[++j] == ' ')
    211   {
    212    ++j;
    213   }
    214   tmpByte = str[j];        
    215   cmd[i] = cmd[i] + (ASCIIToHexChar(tmpByte) & 0xF);//取低4位然后相加。    
    216 
    217 }
    218 注释:
    219 把字符赋给BYTE,实则赋的是字符的ASCII码值,因此要先把ASCII码转化为对应的16进制数。
    220 两个字符赋给一个BYTE,就要把第一个字符放到BYTE的高4位,而第二个字符放到BYTE的低4位。
    221 中间通过判断去掉空格。
    222 
    223  
    224 
    225 //************************************
    226 // Method:    HexstringToString
    227 // FullName:  HexstringToString
    228 // Access:    public 
    229 // Returns:   返回处理后字符串 CString
    230 
    231 // Qualifier: 把十六进制字符串转化常规字符串
    232 //************************************
    233 CString  HexstringToString(CString hex)
    234 {
    235  CString str;
    236  int i,hlen,iData,iFlag;
    237  char ch;
    238  iData=0;
    239  iFlag=0;
    240  hlen=hex.GetLength();//int)strlen(hex);
    241  for (i=0;i<hlen;i++)
    242  {
    243   if (' '==hex[i]) 
    244   {
    245    continue;
    246   }
    247 
    248   ch=hex.GetAt(i);//hex[i];
    249   if ((ch>='0') && (ch<='9'))
    250   {
    251    ch-=0x30;
    252   }
    253   else if ((ch>='a') && (ch<='f'))
    254   {
    255    ch-=0x57;
    256   }
    257   else if ((ch>='A') && (ch<='F'))
    258   {
    259    ch-=0x37;
    260   }
    261   else
    262   {
    263            str="";
    264   }
    265 
    266   if (0==iFlag)
    267   {
    268    iData=ch;
    269    iFlag=1;
    270   }
    271   else
    272   {
    273    iData=(iData<<4) +ch;
    274    iFlag=0;
    275    str+=iData;
    276   }
    277  }
    278  return str;//0;
    279 }
    280 
    281  
    282 
    283 //************************************
    284 //函数名称:int StrToHex(const char *str, char *hex, UINT nLength)
    285 //功        能:将字符串(不一定是以''结尾的)转化为十六进制表示的字符串,
    286 
    287 //如:"HELLO"-->"48 45 4C 4C 4F" nLength可以指定为字符串的实际长度 
    288            
    289 //参数说明:str--------需要转换的字符串
    290 //               hex -------转换后的字符串
    291 //               nLength----需要转换的字符串的长度(对不以''结束的无符号数组,需要指明长度)
    292 //返 回 值:零,成功
    293 //************************************
    294 int StringToHexing(const char *str, char *hex , UINT nLength)
    295 {
    296      int i;
    297      for (i=0;i<(int)nLength;i++)
    298      {
    299 
    300          sprintf(hex+i*3,"%02X ",str[i]&0xFF); //将字符转化为相应的十六进制表示
    301 
    302      }
    303      return 0;
    304 }
    305 
    306  
    307 
    308 //************************************
    309 // Method:    HexstringToByteAry
    310 // FullName:  HexstringToByteAry
    311 // Access:    public 
    312 // Returns:   int  返回转换后字节数组长度
    313 // Qualifier: 把字符串转化字节数组
    314 // Parameter: CString str 源十六进制字符串
    315 // Parameter: CByteArray & data 目标字节数组
    316 //************************************
    317 int CTestComPortDlg::HexstringToByteAry(CString str,CByteArray &data)
    318 {
    319  int t,t1;
    320  int rlen=0,
    321   len=str.GetLength();
    322  data.SetSize(len/2);
    323  for(int i=0;i<len;)
    324  {
    325   char l,h=str[i];
    326   if(h==' ')
    327   {
    328    i++;
    329    continue;
    330   }
    331   i++;
    332   if(i>=len)
    333   {
    334    break;
    335   }
    336   
    337   l=str[i];
    338   t=HexToChar(h);
    339   t1=HexToChar(l);
    340   if((t==16)||(t1==16))
    341   {
    342    break;
    343   }
    344   else 
    345   {
    346    t=t*16+t1;
    347   }
    348   i++;
    349   data[rlen]=(char)t;
    350   rlen++;
    351  }
    352  data.SetSize(rlen);
    353  return rlen;
    354 }
    355 
    356  
    357 
    358 //************************************
    359 
    360 //函数:WCharToChar
    361 //功能:将16位wchar_t转换为 8位char[2]
    362 //参数:wcn为待转换的16位字符,ccn[]为转换后的8位字符
    363 //备注:wchar_t的高位字节应该存储在char数组的低位字节
    364 
    365 //************************************
    366 void  WCharToChar(wchar_t wcn , char ccn[])
    367 {    
    368     ccn[0] = wcn >> 8 ;
    369     ccn[1] = (char)wcn ;
    370 }
    371 
    372 
    373 //************************************
    374 //函数:WCharToHexstring
    375 //功能:将16位字符串转换为十六进制字符串
    376 //参数:待转换的字符串,字符串长度
    377 //返回值:转换后的字符串
    378 //************************************
    379 
    380 CString  WCharToHexstring(CString data, long nDataLength)
    381 {
    382  CString sResult("");
    383  for (long j=0; j<nDataLength;j++)
    384  {
    385   wchar_t ch = data.GetAt(j);
    386  
    387   char ccn[2]={'0'}; //将wchar_t转换为char[2]
    388   W2C(ch,ccn);
    389   
    390   static const char *hex = "0123456789ABCDEF";
    391   for(int i=0;i<2;i++)
    392   {
    393    unsigned char chHexA = hex[((unsigned char)(ccn[i]) >> 4) & 0x0f];
    394    unsigned char chHexB = hex[(unsigned char)(ccn[i]) & 0x0f];
    395    sResult += (char)chHexA;
    396    sResult += (char)chHexB;
    397   }
    398  }
    399  return sResult;
    400 }
    401 
    402  
    403 
    404 //************************************
    405 //函数:HexstringToInt
    406 
    407 //功能:将16位字符串转换为整形
    408 
    409 //参数:待转换的字符串
    410 
    411 //返回值:转换后的数据
    412 
    413 //************************************
    414 int  HexstringToInt(char *pstr)   
    415 {   
    416  int length = strlen(pstr);   
    417  char ex;   
    418  int result=0;   
    419  int i = 0;   
    420  while(length--)   
    421  {   
    422   if (pstr[length]<='9'&&pstr[length]>='0')   
    423 
    424  {
    425    ex = pstr[length]-'0';   
    426  }
    427   else if(pstr[length]<='f'&&pstr[length]>='a') 
    428  {  
    429    ex = pstr[length]-'a'+10;   
    430  }
    431   result += ex*(int)pow(16,i);   
    432   i ++;   
    433  }   
    434  ///printf("result=%d
    ",result);   
    435  return result;   
    436 
    437  
    438 
    439 }  
    440 
    441  
    442 
    443 //************************************
    444 //函数:DecimalToHex
    445 
    446 //功能:把10进制转换成16进制字符串的函数
    447 
    448  
    449 
    450 //************************************
    451 
    452 char* DecimalToHex(short n) 
    453 { 
    454  char* p=(char*)malloc(5); 
    455  char* p1=p+4; 
    456  *p1=0; 
    457  char c=0; 
    458  while (p1>p) 
    459  { 
    460   c=n%16; 
    461   n/=16; 
    462   if (c>=10) 
    463   {
    464    c+=7; 
    465   }
    466   c+=0x30; 
    467   p1--; 
    468   *p1=c; 
    469  } 
    470  return p; 
    471 } 
    472 
    473 //************************************
    474 //函数:ByteToHex
    475 
    476 //功能:字节转换成十六进制字符
    477 
    478 //参数:待转换的字节, 长度
    479 
    480 //************************************
    481 
    482   void ByteToHex(UINT* hex,UINT n)
    483 
    484   {
    485 
    486    static const UINT HEX[] = "0123456789ABCDEF"; 
    487 
    488     hex[0] = HEX[n / 16];
    489 
    490     hex[1] = HEX[n % 16];
    491 
    492  
    493 
    494 }
    495 
    496  
    497 
    498 //************************************
    499 //函数:ByteToHex
    500 
    501 //功能:数据块转换成十六进制字符串
    502 
    503 //参数:将一块数据转化成16进制,存放到 buff所指的缓冲区,len为要转换的字节个数
    504 
    505 //************************************
    506 
    507 void blockDataToHexstring(char * input,char * buff,int len)
    508 
    509 {
    510 
    511     int cur;
    512 
    513     for (cur = 0; cur < len; cur++)
    514 
    515     {
    516 
    517         ByteToHex(buff+ 2 * cur,input[cur]);
    518 
    519     }
    520 
    521 }
    522 
    523  
    524 
    525  
    526 
    527 //************************************
    528 //函数:ByteArrayToHex
    529 
    530 //功能:字符数组的ASC转化位16进制
    531 
    532 //参数:size为要转换的字节数组长度
    533 
    534 //备注:调用如:
    535 
    536 char asc[]="123";
    537 static char buf[100];
    538 FormatToHex(buf,asc,sizeof(asc));
    539 输出字符串--"31 32 33 00 "
    540 
    541 //************************************
    542 void ByteArrayToHex(char *pOut,BYTE *pIn,int size)
    543 {
    544   char dl,dh;
    545  for(int k=0;k<size;k++)
    546  {
    547          dl=pIn[k] & 0x0F;
    548 
    549   pOut[3*k+1]=((dl<0xA)? dl+0x30 : dl+0x37);
    550 
    551   dh=(pIn[k] >> 4) & 0x0F;
    552 
    553   pOut[3*k]=((dh<0xA)? dh+0x30 : dh+0x37);
    554 
    555   pOut[3*k+2]=0x20;
    556 
    557 
    558  }
    559 
    560 }
    561 
    562  
    563 
    564 //************************************
    565 //函数:FormatHexstring
    566 
    567 //功能:格式化显示字符串
    568 
    569 //参数:字符串起始地址input,共显示 len次,每次显示size个字符
    570 
    571 //************************************
    572 
    573 void FormatHexstring(char * input,int len,int size)
    574 
    575 {
    576 
    577     int cur = 0;
    578 
    579     int rowcnt = 0;
    580 
    581     printf("%08dh:",rowcnt++);
    582 
    583     do {
    584 
    585         printf("0x%-3.2s",input + size * cur);
    586 
    587         cur++;
    588 
    589         if (cur % 8 == 0)
    590 
    591         {
    592 
    593             printf("
    %08dh:",rowcnt++);
    594 
    595         }       
    596 
    597     } while(cur < len);
    598 }
    599 
    600  
    601 
    602 本函数关键是用好printf的格式化输出功能。
    603 
    604 ①printf("%08xh:",row_cnt++); 中的"%08x",表示输出十六进制整数,宽度为8个字符,左填充0。
    605 
    606 ②printf("0x%-3.2s",in + size * cur);中 "%-3.2s"表示输出字符串,宽度为3,精度为2(精度表示最多输出两个字符,多的舍去)左对齐,右填充空格。
    607 
    608  
    609 
    610 把十六进制数返回 整形,浮点形
    611 
    612 可以用
    613 
    614 整形 
    615 
    616 int data=0;
    617 
    618 sscanf(hexstr,"%X",&data);
    619 
    620  
    621 
    622 浮点形
    623 
    624 float data=0.0;
    625 
    626 sscanf(hexstr,"%X",&data);
    627 
    628 
    629 
    630 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cgli1/archive/2010/04/08/5462091.aspx
  • 相关阅读:
    .NETCore_初探
    .NETCore_生成实体
    架构碎屑
    Helper
    26.【转载】挖洞技巧:绕过短信&邮箱轰炸限制以及后续
    25.【转载】挖洞技巧:支付漏洞之总结
    24.【转载】挖洞技巧:信息泄露之总结
    5.Windows应急响应:挖矿病毒
    4.Windows应急响应:勒索病毒
    3.Windows应急响应:蠕虫病毒
  • 原文地址:https://www.cnblogs.com/nxopen2018/p/11182717.html
Copyright © 2011-2022 走看看