Cstring转charstringint等数据类型.docx

上传人:b****8 文档编号:9493471 上传时间:2023-05-19 格式:DOCX 页数:19 大小:18.88KB
下载 相关 举报
Cstring转charstringint等数据类型.docx_第1页
第1页 / 共19页
Cstring转charstringint等数据类型.docx_第2页
第2页 / 共19页
Cstring转charstringint等数据类型.docx_第3页
第3页 / 共19页
Cstring转charstringint等数据类型.docx_第4页
第4页 / 共19页
Cstring转charstringint等数据类型.docx_第5页
第5页 / 共19页
Cstring转charstringint等数据类型.docx_第6页
第6页 / 共19页
Cstring转charstringint等数据类型.docx_第7页
第7页 / 共19页
Cstring转charstringint等数据类型.docx_第8页
第8页 / 共19页
Cstring转charstringint等数据类型.docx_第9页
第9页 / 共19页
Cstring转charstringint等数据类型.docx_第10页
第10页 / 共19页
Cstring转charstringint等数据类型.docx_第11页
第11页 / 共19页
Cstring转charstringint等数据类型.docx_第12页
第12页 / 共19页
Cstring转charstringint等数据类型.docx_第13页
第13页 / 共19页
Cstring转charstringint等数据类型.docx_第14页
第14页 / 共19页
Cstring转charstringint等数据类型.docx_第15页
第15页 / 共19页
Cstring转charstringint等数据类型.docx_第16页
第16页 / 共19页
Cstring转charstringint等数据类型.docx_第17页
第17页 / 共19页
Cstring转charstringint等数据类型.docx_第18页
第18页 / 共19页
Cstring转charstringint等数据类型.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Cstring转charstringint等数据类型.docx

《Cstring转charstringint等数据类型.docx》由会员分享,可在线阅读,更多相关《Cstring转charstringint等数据类型.docx(19页珍藏版)》请在冰点文库上搜索。

Cstring转charstringint等数据类型.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2