accept函数_c语言字符处理函数常见使用集合

2d4e1b1176af1a0992303a47b3ded617.png

1.最近看一些开源项目代码时,总会看到 c 语言中一些 "str" 开头的处理字符串的用法,有的之前没用到过,特此记录,随时看到随时添加。

这里不提出源码,只是一些使用说明加例子:

1).unsigned long int strtoul(const char *nptr, char **endptr, int base);(类似还有atoi,atof, strtoi, strtol等)

描述:  

  strtoul()会将参数nptr字符串根据参数base来转换成无符号的长整型数。参数base范围从2至36,或0。

  参数base代表采用的进制方式,如base值为10则采用10进制,若base值为16则采用16进制数等。

  当base值为0时会根据情况选择用哪种进制:如果第一个字符是'0',就判断第二字符如果是‘x’则用16进制,否则用8进制;第一个字符不是‘0’,则用10进制。

  一开始strtoul()会扫描参数nptr字符串,跳过前面的空格字符串,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时('')结束转换,并将结果返回。若参数endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr返回。

理解:

  个人觉得使用这个函数的时候,首先要清楚nptr所指的内容是什么进制表达的数,例如"0xff"首先这是个16进制的数,然后你是想要知道这个16进制的数的无符号长整形对应的值是多少。

  类似的还有“1234”, “-1234” 等将其转化为对应的无符号数。用错的方式有多种,但是正确的就一种,就是nprt指向的内容可以得到你想要的合法的base进制表达的值.

测试程序:

#include 

操作:输入nptr的内容 和 base值, result:即为转换结果。

bad7d6edd2f060f7eef002526d3bbb00.png

八进制的转换规则:

十进制到八进制规则:和十进制转二进制一样,除8取每次的余数,然后余数前后转置

八进制转十进制:和二进制转十进制一样,对应位乘上 8^x次方,然后相加,例:72(8)-> 2*8^0 + 7*8^1 = 16 + 56 = 72;

有符号整数转无符号整数:整数相等;负数,符号位在内取反再加1.

2. char * strchr(const char *s, int c), char * strrchr(const char *s, int c);

描述:strchr找到字符c在字符串s中第一次出现的位置,若找到返回该位置的地址,如没找到返回NULL。

   strrchr 找到字符c在字符串s中最后一次出现的位置,若找到返回该位置的地址,如没找到返回NULL。

3.size_t strspn(const char *s, const char *accept), size_t strcspn(const char *s, const char *reject)

描述: strspn, s中从第一个字符开始判断是该字符是否属于accept,若属于则继续往下判断,若不属于返回该字符的在s中的下标,依次类推。s中字符下标从0开始

例子程序:

#include 

测试结果:

c12973de1657bb4b204810fef73fb8ce.png

下面是lsocket中用到该函数的地方:

/* _needsnolookup

4. int strcasecmp(const char *s1, const char *s2); int strncasecmp(const char *s1, const char *s2);

描述:比较两个字符串的大小,相同返回i,不同若在第i个字符出不等则返回s1[i] - s2[2]的值,最中要的一点是,s1, s2部分大小写。

理解:和strcmp , strncmp实际上用发相同,只不过是比较的两个字符串部分大小写即 a = a, a = A ...

代码:

#include 

测试结果:

c541bcd8ea860e71083da6bcedfd20fc.png

待添加。

Hope this is helpful for you. 欢迎指正错误

C/C++学习资料分享交流群:1093776732 入群有全套学习视频资料电子书免费赠送!

参考资料:

物联网开发入门直播课 - 嵌入式/物联网-C语言编程基础​www.makeru.com.cn 嵌入式开发直播课 - 带你提升C编程能力​www.makeru.com.cn
6a6d5a9b524224df5f4ef137731bc2a3.png
嵌入式底层开发 - 夯实C语言,从小白到大牛的进阶之路!​www.makeru.com.cn
6a6d5a9b524224df5f4ef137731bc2a3.png
嵌入式开发直播课 - 嵌入式-指针​www.makeru.com.cn 嵌入式底层开发 - 指针"换装",你还认识吗? - 创客学院直播室​www.makeru.com.cn
6a6d5a9b524224df5f4ef137731bc2a3.png

C

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: TCP连包是指在TCP通信中,多个数据包被合并在一起,一次传输到接收方。处理TCP连包的主要方法有以下几种: 1. 使用固定长度的数据包:发送方在发送数据包前,将数据包按照固定长度进行划分,接收方根据固定长度来判断每个数据包的边界。接收方在接收到数据时,根据固定长度进行数据拆分和处理。这种方法简单直接,但效率相对较低。 2. 使用特殊字符作为边界标志:发送方在每个数据包的末尾添加特殊字符(如换行符或结束符)作为边界标志,接收方根据特殊字符来判断每个数据包的边界。接收方在接收到数据时,根据特殊字符进行数据拆分和处理。这种方法比固定长度更灵活,但在数据中出现特殊字符时可能会产生问题。 3. 使用长度字段进行标识:发送方在每个数据包的开头添加一个表示数据包长度的字段,接收方首先读取长度字段,根据长度字段的数值读取相应长度的数据进行处理。这种方法可以确保数据包完整性,并且能够处理变长数据,但在长度字段的处理上可能存在一定的复杂性。 4. 使用应用层协议进行处理:应用层协议可以在传输层的基础上定义自己的数据包格式和处理方式,例如HTTP协议中使用报文头和报文体进行数据传输和处理。这种方法可以定制化处理方式,但需要自行设计和实现协议。 综上所述,处理TCP连包的方法可以根据具体需求和应用场景进行选择。根据不同的处理方法,可以选择合适的数据拆分方式,确保数据的完整性和正确性,并进行相应的处理。 ### 回答2: 处理TCP连包可以用C语言编写的方式来实现。在C语言中,可以使用Socket编程来处理TCP连接和数据传输。 首先,我们需要创建一个Socket,使用socket()函数来创建一个TCP套接字。然后,使用bind()函数将套接字绑定到特定的IP地址和端口号。接下来,使用listen()函数将套接字设置为监听状态,等待客户端连接。 一旦有客户端连接进来,我们可以使用accept()函数接受连接,返回一个新的套接字,该套接字可以与客户端通信。然后,可以使用recv()函数从客户端接收数据,该函数会返回接收到的数据的字节数。 在处理TCP连包时,我们可以设置一个缓冲区来存储接收到的数据。可以使用缓冲区的大小和接收到的数据的大小来判断是否接收到了完整的数据包。如果接收到的数据超过了缓冲区的大小,说明发生了连包现象。 当发生连包时,我们可以将接收到的数据进行处理,将完整的数据包提取出来,然后将剩余部分再次放入缓冲区等待下次处理。 当数据包完整时,我们可以对数据包进行解析和处理,根据协议逻辑来进行相应的操作。完成数据处理后,可以使用send()函数将处理后的数据发送回客户端。 最后,当通信结束时,我们需要使用close()函数关闭套接字,释放资源。 在处理TCP连包时,需要对数据进行缓存、解析和处理等操作,以确保数据能够正确传输和处理。同时,需要注意处理异常情况,如网络断开、连接超时等,以保证程序的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值