+ -
当前位置:首页 → 问答吧 → 用ClientSocket发数据,字符串转换的问题,解决即送分

用ClientSocket发数据,字符串转换的问题,解决即送分

时间:2011-12-02

来源:互联网

我现在要用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';

作者: hificat2   发布时间: 2011-12-02

你这个肯定字符串中的数值都是小于256的么?不然就会出错的呀,而且为什么一定要这么发送呀?个人觉得你后面处理更容易些。

作者: zzbinfo   发布时间: 2011-12-03

是的,字符串中的所有的数字都是不超过200的

作者: hificat2   发布时间: 2011-12-03

学习,

作者: wang7535067   发布时间: 2011-12-03

字符串中每个字节都是要小与256,或则你可以用双字节进行

作者: jacknes009   发布时间: 2011-12-03

改成这样可以达到你要的效果C/C++ code
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]);
  }

作者: zzbinfo   发布时间: 2011-12-03