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