1、Cstring转charstringint等数据类型Cstring转char、string、int等数据类型的方法CString 转char *CString cstr;char *p = (LPSTR)(LPCTSTR)cstr;string 转 CStringCString.format(”%s”, string.c_str();char 转 CStringCString.format(”%s”, char*);char 转 stringstring s(char *);string 转 char *char *p = string.c_str();CString 转 stringstri
2、ng s(CString.GetBuffer();1,string - CStringCString.format(”%s”, string.c_str();用c_str()确实比data()要好.2,char - stringstring s(char *);只能初始化,在不是初始化的地方最好还是用assign().3,CString - stringstring s(CString.GetBuffer();GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.C+标准函数库中说的有三个函数可以将字符串的内容转换为字符数组和Cstring1.data(
3、),返回没有”0“的字符串数组2,c_str(),返回有”0“的字符串数组3,copy()CString与int、char*、char100之间的转换- -CString与int、char*、char100之间的转换- -CString互转int将字符转换为整数,可以使用atoi、_atoi64或atol。而将数字转换为CString变量,可以使用CString的Format函数。如CString s;int i = 64;s.Format(”%d”, i)Format函数的功能很强,值得你研究一下。void CStrDlg:OnButton1()/ TODO: Add your contro
4、l notification handler code hereCStringss=”1212.12;int temp=atoi(ss);CString aa;aa.Format(”%d”,temp);AfxMessageBox(”var is ” + aa);sart.Format(”%s”,buf);CString互转char*/char * TO cstringCString strtest;char * charpoint;charpoint=”give string a value”;strtest=charpoint;/cstring TO char *CString 转char
5、*CString cstr;char *p = (LPSTR)(LPCTSTR)cstr;string 转 CStringCString.format(”%s”, string.c_str();char 转 CStringCString.format(”%s”, char*);char 转 stringstring s(char *);string 转 char *char *p = string.c_str();CString 转 stringstring s(CString.GetBuffer();1,string - CStringCString.format(”%s”, string.
6、c_str();用c_str()确实比data()要好.2,char - stringstring s(char *);只能初始化,在不是初始化的地方最好还是用assign().3,CString - stringstring s(CString.GetBuffer();GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.C+标准函数库中说的有三个函数可以将字符串的内容转换为字符数组和Cstring1.data(),返回没有”0“的字符串数组2,c_str(),返回有”0“的字符串数组3,copy()CString与int、char*、char100之
7、间的转换- -CString与int、char*、char100之间的转换- -CString互转int将字符转换为整数,可以使用atoi、_atoi64或atol。而将数字转换为CString变量,可以使用CString的Format函数。如CString s;int i = 64;s.Format(”%d”, i)Format函数的功能很强,值得你研究一下。void CStrDlg:OnButton1()/ TODO: Add your control notification handler code hereCStringss=”1212.12;int temp=atoi(ss);CS
8、tring aa;aa.Format(”%d”,temp);AfxMessageBox(”var is ” + aa);sart.Format(”%s”,buf);CString互转char*/char * TO cstringCString strtest;char * charpoint;charpoint=”give string a value”;strtest=charpoint;/cstring TO char *charpoint=strtest.GetBuffer(strtest.GetLength();标准C里没有string,char *=char =string可以用CS
9、tring.Format(”%s”,char *)这个方法来将char *转成CString。要把CString转成char *,用操作符(LPCSTR)CString就可以了。CString转换 char100char a100;CString str(”aaaaaa”);strncpy(a,(LPCTSTR)str,sizeof(a);charpoint=strtest.GetBuffer(strtest.GetLength();标准C里没有string,char *=char =string可以用CString.Format(”%s”,char *)这个方法来将char *转成CStri
10、ng。要把CString转成char *,用操作符(LPCSTR)CString就可以了。CString转换 char100char a100;CString str(”aaaaaa”);strncpy(a,(LPCTSTR)str,sizeof(a);/将ASCII码转化为16进制数BYTE ASCIIToHexChar(BYTE ch) if(ch=0)&(ch=A)&(ch=a)&(ch=0)&(ch=A)&(ch=a)&(ch=f) return ch-a+10; else return -1; /16进制字符串CString 转为 BYTE 数组的方法BYTE StringToByt
11、eArray(CString str)/CString str =01 02 03 04;例如这样数据 BYTE tmpByte = 0x00; int strLen = str.GetLength(); BYTE cmd1024; /注意越界 memset(cmd, 0, sizeof(cmd); for (int i=0, j=0; isizeof(cmd),jstrLen; i+,j+) if (strj = ) +j; tmpByte = strj; cmdi = ASCIIToHexChar(tmpByte)4;/左移4位 if (str+j = ) +j; tmpByte = st
12、rj; cmdi = cmdi + (ASCIIToHexChar(tmpByte) & 0xF);/取低4位然后相加。 注释:把字符赋给BYTE,实则赋的是字符的ASCII码值,因此要先把ASCII码转化为对应的16进制数。两个字符赋给一个BYTE,就要把第一个字符放到BYTE的高4位,而第二个字符放到BYTE的低4位。中间通过判断去掉空格。 /*/ Method: HexstringToString/ FullName: HexstringToString/ Access: public / Returns: 返回处理后字符串 CString/ Qualifier: 把十六进制字符串转化常
13、规字符串/*CString HexstringToString(CString hex) CString str; int i,hlen,iData,iFlag; char ch; iData=0; iFlag=0; hlen=hex.GetLength();/int)strlen(hex); for (i=0;i=0) & (ch=a) & (ch=A) & (ch=F) ch-=0x37; else str=; if (0=iFlag) iData=ch; iFlag=1; else iData=(iData48 45 4C 4C 4F nLength可以指定为字符串的实际长度 /参数说明
14、:str-需要转换的字符串/ hex -转换后的字符串/ nLength-需要转换的字符串的长度(对不以0结束的无符号数组,需要指明长度)/返 回 值:零,成功/*int StringToHexing(const char *str, char *hex , UINT nLength) int i; for (i=0;i(int)nLength;i+) sprintf(hex+i*3,%02X ,stri&0xFF); /将字符转化为相应的十六进制表示 return 0; /*/ Method: HexstringToByteAry/ FullName: HexstringToByteAry/
15、 Access: public / Returns: int 返回转换后字节数组长度/ Qualifier: 把字符串转化字节数组/ Parameter: CString str 源十六进制字符串/ Parameter: CByteArray & data 目标字节数组/*int CTestComPortDlg:HexstringToByteAry(CString str,CByteArray &data) int t,t1; int rlen=0, len=str.GetLength(); data.SetSize(len/2); for(int i=0;i=len) break; l=st
16、ri; t=HexToChar(h); t1=HexToChar(l); if(t=16)|(t1=16) break; else t=t*16+t1; i+; datarlen=(char)t; rlen+; data.SetSize(rlen); return rlen; /*/函数:WCharToChar/功能:将16位wchar_t转换为 8位char2/参数:wcn为待转换的16位字符,ccn为转换后的8位字符/备注:wchar_t的高位字节应该存储在char数组的低位字节/*void WCharToChar(wchar_t wcn , char ccn) ccn0 = wcn 8
17、; ccn1 = (char)wcn ;/*/函数:WCharToHexstring/功能:将16位字符串转换为十六进制字符串/参数:待转换的字符串,字符串长度/返回值:转换后的字符串/*CString WCharToHexstring(CString data, long nDataLength) CString sResult(); for (long j=0; jnDataLength;j+) wchar_t ch = data.GetAt(j); char ccn2=0; /将wchar_t转换为char2 W2C(ch,ccn); static const char *hex = 0
18、123456789ABCDEF; for(int i=0;i 4) & 0x0f; unsigned char chHexB = hex(unsigned char)(ccni) & 0x0f; sResult += (char)chHexA; sResult += (char)chHexB; return sResult; /*/函数:HexstringToInt/功能:将16位字符串转换为整形/参数:待转换的字符串/返回值:转换后的数据/*int HexstringToInt(char *pstr) int length = strlen(pstr); char ex; int resul
19、t=0; int i = 0; while(length-) if (pstrlength=0) ex = pstrlength-0; else if(pstrlength=a) ex = pstrlength-a+10; result += ex*(int)pow(16,i); i +; /printf(result=%dn,result); return result; /*/函数:DecimalToHex/功能:把10进制转换成16进制字符串的函数 /*char* DecimalToHex(short n) char* p=(char*)malloc(5); char* p1=p+4;
20、*p1=0; char c=0; while (p1p) c=n%16; n/=16; if (c=10) c+=7; c+=0x30; p1-; *p1=c; return p; /*/函数:ByteToHex/功能:字节转换成十六进制字符/参数:待转换的字节, 长度/* void ByteToHex(UINT* hex,UINT n) static const UINT HEX = 0123456789ABCDEF; hex0 = HEXn / 16; hex1 = HEXn % 16; /*/函数:ByteToHex/功能:数据块转换成十六进制字符串/参数:将一块数据转化成16进制,存放
21、到 buff所指的缓冲区,len为要转换的字节个数/*void blockDataToHexstring(char * input,char * buff,int len) int cur; for (cur = 0; cur len; cur+) ByteToHex(buff+ 2 * cur,inputcur); /*/函数:ByteArrayToHex/功能:字符数组的ASC转化位16进制/参数:size为要转换的字节数组长度/备注:调用如:char asc=123;static char buf100;FormatToHex(buf,asc,sizeof(asc);输出字符串-31 3
22、2 33 00 /*void ByteArrayToHex(char *pOut,BYTE *pIn,int size) char dl,dh; for(int k=0;ksize;k+) dl=pInk & 0x0F; pOut3*k+1=(dl 4) & 0x0F; pOut3*k=(dh0xA)? dh+0x30 : dh+0x37); pOut3*k+2=0x20; /*/函数:FormatHexstring/功能:格式化显示字符串/参数:字符串起始地址input,共显示 len次,每次显示size个字符/*void FormatHexstring(char * input,int len,int size) int cur = 0; int rowcnt = 0; printf(%08dh:,rowcnt+); do printf(0x%-3.2s,input + size * cur); cur+; if (cur % 8 = 0) printf(n%08dh:,rowcnt+); while(cur len); 本函数关键是用好printf的格式化输出功能。printf(%08xh:,row_cnt+); 中的%08x,表示输出十六进制整数,宽度为8个字符,左填充0。printf(0x%-3.2s
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2