首页 > 其他 > 详细

Cstring转char、string、int等数据类型的方法(转载)

时间:2019-07-14 00:59:07      阅读:124      评论:0      收藏:0      [点我收藏+]
  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, \0, 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 //功        能:将字符串(不一定是以‘\0‘结尾的)转化为十六进制表示的字符串,
286 
287 //如:"HELLO"-->"48 45 4C 4C 4F" nLength可以指定为字符串的实际长度 
288            
289 //参数说明:str--------需要转换的字符串
290 //               hex -------转换后的字符串
291 //               nLength----需要转换的字符串的长度(对不以‘\0‘结束的无符号数组,需要指明长度)
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\n",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("\n%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

 

Cstring转char、string、int等数据类型的方法(转载)

原文:https://www.cnblogs.com/nxopen2018/p/11182717.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!