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 char 转 string 16 string s(char *); 17 string 转 char * 18 char *p = string.c_str(); 19 CString 转 string 20 string s(CString.GetBuffer()); 21 1,string -> CString 22 CString.format(”%s”, string.c_str()); 23 用c_str()确实比data()要好. 24 2,char -> 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 char 转 string 71 string s(char *); 72 string 转 char * 73 char *p = string.c_str(); 74 CString 转 string 75 string s(CString.GetBuffer()); 76 1,string -> CString 77 CString.format(”%s”, string.c_str()); 78 用c_str()确实比data()要好. 79 2,char -> 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