用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';
,如以下方式:
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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28