Cstring转charstringint等数据类型.docx
- 文档编号:23664791
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:19
- 大小:18.88KB
Cstring转charstringint等数据类型.docx
《Cstring转charstringint等数据类型.docx》由会员分享,可在线阅读,更多相关《Cstring转charstringint等数据类型.docx(19页珍藏版)》请在冰豆网上搜索。
Cstring转charstringint等数据类型
Cstring转char、string、int等数据类型的方法
CString转char*
CStringcstr;
char*p=(LPSTR)(LPCTSTR)cstr;
string转CString
CString.format(”%s”,string.c_str());
char转CString
CString.format(”%s”,char*);
char转string
strings(char*);
string转char*
char*p=string.c_str();
CString转string
strings(CString.GetBuffer());
1,string->CString
CString.format(”%s”,string.c_str());
用c_str()确实比data()要好.
2,char->string
strings(char*);
只能初始化,在不是初始化的地方最好还是用assign().
3,CString->string
strings(CString.GetBuffer());
GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.
《C++标准函数库》中说的
有三个函数可以将字符串的内容转换为字符数组和C―string
1.data(),返回没有”\0“的字符串数组
2,c_str(),返回有”\0“的字符串数组
3,copy()
―――――――――――――――――――――
CString与int、char*、char[100]之间的转换--
CString与int、char*、char[100]之间的转换--
CString互转int
将字符转换为整数,可以使用atoi、_atoi64或atol。
而将数字转换为CString变量,可以使用CString的Format函数。
如
CStrings;
inti=64;
s.Format(”%d”,i)
Format函数的功能很强,值得你研究一下。
voidCStrDlg:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CString
ss=”1212.12″;
inttemp=atoi(ss);
CStringaa;
aa.Format(”%d”,temp);
AfxMessageBox(”varis”+aa);
}
sart.Format(”%s”,buf);
CString互转char*
///char*TOcstring
CStringstrtest;
char*charpoint;
charpoint=”givestringavalue”;
strtest=charpoint;
///cstringTOchar*
CString转char*
CStringcstr;
char*p=(LPSTR)(LPCTSTR)cstr;
string转CString
CString.format(”%s”,string.c_str());
char转CString
CString.format(”%s”,char*);
char转string
strings(char*);
string转char*
char*p=string.c_str();
CString转string
strings(CString.GetBuffer());
1,string->CString
CString.format(”%s”,string.c_str());
用c_str()确实比data()要好.
2,char->string
strings(char*);
只能初始化,在不是初始化的地方最好还是用assign().
3,CString->string
strings(CString.GetBuffer());
GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.
《C++标准函数库》中说的
有三个函数可以将字符串的内容转换为字符数组和C―string
1.data(),返回没有”\0“的字符串数组
2,c_str(),返回有”\0“的字符串数组
3,copy()
―――――――――――――――――――――
CString与int、char*、char[100]之间的转换--
CString与int、char*、char[100]之间的转换--
CString互转int
将字符转换为整数,可以使用atoi、_atoi64或atol。
而将数字转换为CString变量,可以使用CString的Format函数。
如
CStrings;
inti=64;
s.Format(”%d”,i)
Format函数的功能很强,值得你研究一下。
voidCStrDlg:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CString
ss=”1212.12″;
inttemp=atoi(ss);
CStringaa;
aa.Format(”%d”,temp);
AfxMessageBox(”varis”+aa);
}
sart.Format(”%s”,buf);
CString互转char*
///char*TOcstring
CStringstrtest;
char*charpoint;
charpoint=”givestringavalue”;
strtest=charpoint;
///cstringTOchar*
charpoint=strtest.GetBuffer(strtest.GetLength());
标准C里没有string,char*==char[]==string
可以用CString.Format(”%s”,char*)这个方法来将char*转成CString。
要把CString转成char*,用操作符(LPCSTR)CString就可以了。
CString转换char[100]
chara[100];
CStringstr(”aaaaaa”);
strncpy(a,(LPCTSTR)str,sizeof(a));
charpoint=strtest.GetBuffer(strtest.GetLength());
标准C里没有string,char*==char[]==string
可以用CString.Format(”%s”,char*)这个方法来将char*转成CString。
要把CString转成char*,用操作符(LPCSTR)CString就可以了。
CString转换char[100]
chara[100];
CStringstr(”aaaaaa”);
strncpy(a,(LPCTSTR)str,sizeof(a));
//将ASCII码转化为16进制数
BYTEASCIIToHexChar(BYTEch)
{
if((ch>='0')&&(ch<='9'))
{
returnch-0x30;
}
elseif((ch>='A')&&(ch<='F'))
{
returnch-'A'+10;
}
elseif((ch>='a')&&(ch<='f'))
{
returnch-'a'+10;
}
else
{
return-1;
}
}
//将char转化为16进制
charCharToHexChar(charch)
{
if((ch>='0')&&(ch<='9'))
{
returnch-0x30;
}
elseif((ch>='A')&&(ch<='F'))
{
returnch-'A'+10;
}
elseif((ch>='a')&&(ch<='f'))
{
returnch-'a'+10;
}
else
{
return-1;
}
}
//16进制字符串CString转为BYTE[]数组的方法
BYTE[]StringToByteArray(CStringstr)
{
//CStringstr="01020304";例如这样数据
BYTEtmpByte=0x00;
intstrLen=str.GetLength();
BYTEcmd[1024];//注意越界
memset(cmd,'\0',sizeof(cmd));
for(inti=0,j=0;i { if(str[j]=='') { ++j; } tmpByte=str[j]; cmd[i]=ASCIIToHexChar(tmpByte)<<4;//左移4位 if(str[++j]=='') { ++j; } tmpByte=str[j]; cmd[i]=cmd[i]+(ASCIIToHexChar(tmpByte)&0xF);//取低4位然后相加。 } 注释: 把字符赋给BYTE,实则赋的是字符的ASCII码值,因此要先把ASCII码转化为对应的16进制数。 两个字符赋给一个BYTE,就要把第一个字符放到BYTE的高4位,而第二个字符放到BYTE的低4位。 中间通过判断去掉空格。 //************************************ //Method: HexstringToString //FullName: HexstringToString //Access: public //Returns: 返回处理后字符串CString //Qualifier: 把十六进制字符串转化常规字符串 //************************************ CStringHexstringToString(CStringhex) { CStringstr; inti,hlen,iData,iFlag; charch; iData=0; iFlag=0; hlen=hex.GetLength();//int)strlen(hex); for(i=0;i { if(''==hex[i]) { continue; } ch=hex.GetAt(i);//hex[i]; if((ch>='0')&&(ch<='9')) { ch-=0x30; } elseif((ch>='a')&&(ch<='f')) { ch-=0x57; } elseif((ch>='A')&&(ch<='F')) { ch-=0x37; } else { str=""; } if(0==iFlag) { iData=ch; iFlag=1; } else { iData=(iData<<4)+ch; iFlag=0; str+=iData; } } returnstr;//0; } //************************************ //函数名称: intStrToHex(constchar*str,char*hex,UINTnLength) //功能: 将字符串(不一定是以'\0'结尾的)转化为十六进制表示的字符串, //如: "HELLO"-->"48454C4C4F"nLength可以指定为字符串的实际长度 //参数说明: str--------需要转换的字符串 //hex-------转换后的字符串 //nLength----需要转换的字符串的长度(对不以'\0'结束的无符号数组,需要指明长度) //返回值: 零,成功 //************************************ intStringToHexing(constchar*str,char*hex,UINTnLength) { inti; for(i=0;i<(int)nLength;i++) { sprintf(hex+i*3,"%02X",str[i]&0xFF);//将字符转化为相应的十六进制表示 } return0; } //************************************ //Method: HexstringToByteAry //FullName: HexstringToByteAry //Access: public //Returns: int返回转换后字节数组长度 //Qualifier: 把字符串转化字节数组 //Parameter: CStringstr源十六进制字符串 //Parameter: CByteArray&data目标字节数组 //************************************ intCTestComPortDlg: : HexstringToByteAry(CStringstr,CByteArray&data) { intt,t1; intrlen=0, len=str.GetLength(); data.SetSize(len/2); for(inti=0;i { charl,h=str[i]; if(h=='') { i++; continue; } i++; if(i>=len) { break; } l=str[i]; t=HexToChar(h); t1=HexToChar(l); if((t==16)||(t1==16)) { break; } else { t=t*16+t1; } i++; data[rlen]=(char)t; rlen++; } data.SetSize(rlen); returnrlen; } //************************************ //函数: WCharToChar //功能: 将16位wchar_t转换为8位char[2] //参数: wcn为待转换的16位字符,ccn[]为转换后的8位字符 //备注: wchar_t的高位字节应该存储在char数组的低位字节 //************************************ voidWCharToChar(wchar_twcn,charccn[]) { ccn[0]=wcn>>8; ccn[1]=(char)wcn; } //************************************ //函数: WCharToHexstring //功能: 将16位字符串转换为十六进制字符串 //参数: 待转换的字符串,字符串长度 //返回值: 转换后的字符串 //************************************ CStringWCharToHexstring(CStringdata,longnDataLength) { CStringsResult(""); for(longj=0;j { wchar_tch=data.GetAt(j); charccn[2]={'0'};//将wchar_t转换为char[2] W2C(ch,ccn); staticconstchar*hex="0123456789ABCDEF"; for(inti=0;i<2;i++) { unsignedcharchHexA=hex[((unsignedchar)(ccn[i])>>4)&0x0f]; unsignedcharchHexB=hex[(unsignedchar)(ccn[i])&0x0f]; sResult+=(char)chHexA; sResult+=(char)chHexB; } } returnsResult; } //************************************ //函数: HexstringToInt //功能: 将16位字符串转换为整形 //参数: 待转换的字符串 //返回值: 转换后的数据 //************************************ intHexstringToInt(char*pstr) { intlength=strlen(pstr); charex; intresult=0; inti=0; while(length--) { if(pstr[length]<='9'&&pstr[length]>='0') { ex=pstr[length]-'0'; } elseif(pstr[length]<='f'&&pstr[length]>='a') { ex=pstr[length]-'a'+10; } result+=ex*(int)pow(16,i); i++; } ///printf("result=%d\n",result); returnresult; } //************************************ //函数: DecimalToHex //功能: 把10进制转换成16进制字符串的函数 //************************************ char*DecimalToHex(shortn) { char*p=(char*)malloc(5); char*p1=p+4; *p1=0; charc=0; while(p1>p) { c=n%16; n/=16; if(c>=10) { c+=7; } c+=0x30; p1--; *p1=c; } returnp; } //************************************ //函数: ByteToHex //功能: 字节转换成十六进制字符 //参数: 待转换的字节,长度 //************************************ voidByteToHex(UINT*hex,UINTn) { staticconstUINTHEX[]="0123456789ABCDEF"; hex[0]=HEX[n/16]; hex[1]=HEX[n%16]; } //************************************ //函数: ByteToHex //功能: 数据块转换成十六进制字符串 //参数: 将一块数据转化成16进制,存放到buff所指的缓冲区,len为要转换的字节个数 //************************************ voidblockDataToHexstring(char*input,char*buff,intlen) { intcur; for(cur=0;cur { ByteToHex(buff+2*cur,input[cur]); } } //************************************ //函数: ByteArrayToHex //功能: 字符数组的ASC转化位16进制 //参数: size为要转换的字节数组长度 //备注: 调用如: charasc[]="123"; staticcharbuf[100]; FormatToHex(buf,asc,sizeof(asc)); 输出字符串--"31323300" //************************************ voidByteArrayToHex(char*pOut,BYTE*pIn,intsize) { chardl,dh; for(intk=0;k { dl=pIn[k]&0x0F; pOut[3*k+1]=((dl<0xA)? dl+0x30: dl+0x37); dh=(pIn[k]>>4)&0x0F; pOut[3*k]=((dh<0xA)? dh+0x30: dh+0x37); pOut[3*k+2]=0x20; } } //************************************ //函数: FormatHexstring //功能: 格式化显示字符串 //参数: 字符串起始地址input,共显示len次,每次显示size个字符 //************************************ voidFormatHexstring(char*input,intlen,intsize) { intcur=0; introwcnt=0; printf("%08dh: ",rowcnt++); do{ printf("0x%-3.2s",input+size*cur); cur++; if(cur%8==0) { printf("\n%08dh: ",rowcnt++); } }while(cur } 本函数关键是用好printf的格式化输出功能。 ①printf("%08xh: ",row_cnt++);中的"%08x",表示输出十六进制整数,宽度为8个字符,左填充0。 ②printf("0x%-3.2s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Cstring charstringint 数据类型