字节操纵函数

操作多字节字段的函数有2组

名字以b(表示字节)开头的

名字以mem(表示内存)开头的

它们既不对数据作解释,也不假设数据是以空字符结束的C字符串

当处理套接字地址结构时,我妈需要这些类型的函数,因为我妈需要操作诸如IP地址这样的字段,这些字段可能包含值位0的字节,却并不是C字符串。

以空字符结尾的C字符串是由<string.h>头文件中定义、名字以str开头的函数处理的

void bzero(void *dest,size_t nbytes)

bzero把目标字符串中指定数目的字节置0,常常使用该函数来把一个套接字地址结构初始化为0

void bcopy(const void *src,void *dest,size_t nbytes)

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

int bcmp(const void *ptr1,const void *ptr2,size_t nbyte)

bcmp比较2个任意的字符串,若相同返回0,否则返回非0

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

memset把目标字节串指定数目的字节置为值c

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

memcopy类似bcopy,但是2个指针参数的顺序是相反的

int memcmp(const void *ptr1,const void *ptr2,size_t nbytes)

memcmp比较2个任意的字节串,相同返回0,如果ptr1所指字节串大于ptr2所指的字节串,返回大于0,否则小于0

时间: 2024-12-13 13:03:05

字节操纵函数的相关文章

UNIX网络编程3.5字节操纵函数3.7inet_pton,inet_ntop

UNIX网络编程学习笔记2 需要用到的一些字节操纵和格式转换函数

当然这些东西是炒鸡无聊的,但是真当自己开始撸代码时才发现熟悉这些枯燥的函数能够节约大量的时间.于是总结一下: 字节序:低序字节存储在起始地址,这称为小端(little-endian),高序字节存储在起始地址,这称为大端(big-endian) 例:存放0x0A0B0C0D LE: 0D 0C 0B 0A BE: 0A 0B 0C 0D 小端的存放方式更加接近于人类思维 网际协议使用大端字节序来传送多字节整数(为何要规定一个字节序来传输ip和port? 呸 这样子协议才能正确“看懂”(解释)这些地

字节转换函数 htonl*的由来与函数定义...

字节转换字符由来: 在网络上面有着许多类型的机器,这些机器在表示数据的字节顺序是不同的, 比如i386芯片是低字节在内存地址的低端, intel处理器将32位的整数分4个连续的字节,并以字节序1-2-3-4存储到内存中,1表示最高位字节: 而alpha芯片却相反. 为4-3-2-1方式,如果保存整数内存只是以逐个字节的方式来复制,2台不同处理器的计算机得到的整数值不一样, 为了统一,字节转换函数出现了: 函数定义如下: unsigned long  int htonl(unsigned long

网络与主机字节转换函数:htons ntohs htonl ntohl

网络与主机字节转换函数:htons ntohs htonl ntohl 网络字节序: 网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型.操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释.网络字节顺序采用big endian(大端)排序方式. 注:网络字节序转化为主机字节序时,一定要注意是否需要转换.网络字节序是确定的. 大端与小端 大端:低地址存高位 —— 网络字节序/主机字节序 小端:高地址存低位 —— 主机字节序 网络字节序一定是大端的(网络上传输

字节操作函数

str开头的函数:以空字符结尾的C字符串是由<string.h>头文件定义:如bzero() bcopy() bcmp() b开头的函数:表示字节,起源于4.2BSD:如strcpy() strcmp() mem开头的函数:表示内存, 起源于ANSI C标准.如memset() memcpy() memcmp() ASCII字符串IP地址与一个32位的网络序列IP地址相互转换:inet_aton().inet_ntoa().inet_addr() #include <sys/socket

字节排序函数

考虑一个16位整数,它由2个字节组成.内存中存储这2个字节有2种方法: 一种是将低序字节存储在起始地址,称为小端(little-endian)字节序 另一种方法是将高序字节存储在起始地址,称为大端(big-endian)字节序 我们把系统所采用的字节序称为主机自己序(host byte order) #include "unp.h" int main(int argc, char **argv) { union { short s; char c[sizeof(short)]; } u

Linux C编程--网络编程1--字节顺序和字节处理函数

不同的 CPU 有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序 最常见的有两种 1 . Little endian :将低序字节存储在起始地址 2 . Big endian :将高序字节存储在起始地址 LE little-endian 最符合人的思维的字节序 地址低位存储值的低位 地址高位存储值的高位 怎么讲是最符合人的思维的字节序,是因为从人的第一观感来说 低位值小,就应该放在内存地址小的地方,也即内存地址低位 反之,高位值就应该放在内存地址大的地方,也即内存地址高位

UNIX网络编程第3章套接字编程简介3.2套接字地址结构3.3值结果参数3.4字节排序函数

1: #include <iostream> 2: #include "../lib/unpsunyj.h" 3: 4: int main(int argc, char **argv) 5: { 6: union { 7: short s; 8: char c[sizeof(short)]; 9: } un; 10:   11: un.s = 0x0103; 12: std::cout << "un.s =: " << un.s

【UNIX网络编程(一)】套接字地址结构、网络字节序和地址转换函数

引言:套接字地址结构在网络编程的每个实现中都要用到,因此掌握套接字地址结构是以后编写网络程序的前提,地址结构可以在两个方向上传递:从进程到内核和从内核到进程.地址转换函数在地址的文本表达和他们存放在套接字地址结构中的二进制值之间进行转换. 大多数套接字函数都需要一个指向套接字地址结构的指针作为参数.不同协议都有自己的套接字地址结构.通用的套接字地址结构是sockaddr.IPv4套接字地址结构是定义在头文件<netinet/in.h>中的sockaddr_in,其POSIX定义如下: stru