用ClientSocket发数据,字符串转换的问题,解决即送分
我现在要用ClientSocket1-> Socket-> Sendbuf函数发送数据,这些数据里面有字符型的,也有数值型的
,如以下方式:
char buf[5];
buf[0] = 0;
buf[1] = '1 ';
buf[2] = 0;
buf[3] = '3 ';
buf[4] = 0;
ClientSocket1-> Socket-> Sendbuf(buf, 5); //这样就发送5个字节出去了
我现在有一个字符串,如:AA1BB123CC1DD12EE100 现在需要将字符串中是字母的话,仍旧用字符的方式
发送,字符串中是数字的话,取出来作为数字发送,拆分后可以理解成以下的形式:
buf[0] = 'A';
buf[1] = 'A ';
buf[2] = 1;
buf[3] = 'B ';
buf[4] = 'B ';
buf[5] = 123;
buf[6] = 'C ';
buf[7] = 'C ';
buf[8] = 1;
buf[9] = 'D ';
buf[10] = 'D ';
buf[11] = 12;
buf[12] = 'E ';
buf[13] = 'E ';
buf[14] = 100;
然后执行:ClientSocket1-> Socket-> Sendbuf(buf,15);
我现在写了段代友,但有问题,还望请教各位,问题解决即送分。
AnsiString str="AA1BB123CC1DD12EE100";
char *a=new char[1024];
char *b=new char[1024];
char *c=new char[1024];
int pos1,pos2,length,i,j,bit,k;
length=str.Length();
StrPCopy(b, str); //RA1RB12SM1TL1IR100
j=0;
for (i=0;i<length;i++) //扫描每个字符
{
if(isalpha(*(b+i)))
{
ShowMessage(*(b+i));
c[j++]=*(b+i);
}
if(isdigit(*(b+i)))
{
bit=0;
for (k=0;k<3;k++)
{
if(isdigit(*(b+i+k)))
{
bit++;
}
}
if (bit==1) {c[j++]=int(*(b+i));} //数字是1位数
if (bit==2) {c[j++]=int(int(*(b+i))*10+int(*(b+i+1))); i=i+1;} //数字是2位数
if (bit==3) {c[j++]=int(*(b+i)*100+*(b+i+1)*10+*(b+i));i=i+2;} //数字是3位数
}
}
c[j]='\0';
[解决办法]
你这个肯定字符串中的数值都是小于256的么?不然就会出错的呀,而且为什么一定要这么发送呀?个人觉得你后面处理更容易些。
[解决办法]
改成这样可以达到你要的效果
void __fastcall TForm1::Button2Click(TObject *Sender){AnsiString str="AA1BB123CC1DD12EE100"; char a[3]; char *b=new char[1024]; char *c=new char[1024]; int pos1,length,i,j,bit; length=str.Length(); StrPCopy(b, str); //RA1RB12SM1TL1IR100 j=0; pos1 = 0; for (i=0;i<length;i++) //扫描每个字符 { if(isalpha(*(b+i))) { //ShowMessage(*(b+i)); if(pos1>0) { c[j++] = atoi(a); pos1 = 0; memset(a,0,3); } c[j++]=*(b+i); } if(isdigit(*(b+i))) { a[pos1++] = *(b+i); } } if(pos1>0) { c[j++] = atoi(a); pos1 = 0; memset(a,0,3); } c[j]='\0'; for (i=0;i<strlen(c);i++) { ShowMessage((int)c[i]); }