套接字编程——字节操作函数

套接字编程——字节操作函数

操作多字节字段的函数有两组:

  1. 名字以b(表示字节)开头的第一组函数起源于4.2BSD,几乎所有现今支持套接字函数的系统仍然提供它们。
  2. 名字以mem(表示内存)开头的第二组函数起源于ANSI C标准,支持ANSI C函数库的所有系统都提供它们。

这两组函数,它们既不对数据作解释,也不假设数据是以空字符结束的C字符串。当处理套接字地址结构时,我们需要这些类型的函数,因为我们需要操纵诸如IP地址这样的字段,这些字段可能包含值为0的字节,却不是C字符串。

1. 源自Berkeley的函数

#include <strings.h>

void bzero(void *dest, size_t nbytes);//把目标字节串中指定数目的字节置为0

void bcopy(const void *src, void *dest, size_t nbytes);//将指定数目的字节从源字节串移到目标字节串

int bcmp(const void *ptrl, const void *ptr2, size_t nbytes);//比较两个任意的字节串,若相同则返回值为0,否则返回值为非0。

bzero把目标字节串中指定数目的字节置为0。我们经常使用该函数来把一个套接字结构初始化为0。

bcopy将指定数目的字节从源字节串移到目标字节串。

bcmp比较两个任意的字节串,若相同则返回值为0,否则返回值为非0。

2. ANSI C函数

#include <string.h>

void *memset(void *dest, int c, size_t len);

void *memcpy(void *dest, const void *src, size_t nbytes);

int memcmp(const void *ptr1, const void *ptr2, size_t nbytes);//返回值:若相等则为0,否则为<0或>0

memset把目标字节串指定数目的字节置为值c。memcpy类似bcopy,不过两个指针参数的顺序是相反的。当源字节串与目标字节串重叠时,bcopy能够正确处理,但是memcpy的操作结果却不可知。这种情形下必须改用ANSI C的memmove函数。

记住memcpy两个指针参数顺序的方法之一是记着它们是按照与C中的赋值语句相同的顺序从左到右书写的:

dest = src;

记住memset最后两个参数顺序的方法之一是认识到所有ANSI C的memXXX函数都需要一个长度参数,而且它总是最后一个参数。

memcmp比较两个任意的字节串,若相同则返回0,否则返回一个非0值,是大于0还是小于0则取决于第一个不等的字节:如果ptr1所指字节串中的这个字节大于ptr2所指字节串中的对应字节,那么大于0,否则小于0。我们的比较操作是在假设两个不等的字节均为无符号字符(unsigned char)的前提下完成的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值