TCP 协议 函数
strcpy()函数标准该如何去实现呢?
TCP协议如何保证可靠性呢?
回帖(1)
2021-12-24 17:51:18
1.位操作
#include
int main(void)
{
// 把一个寄存器值的bit4~bit7取反,其他位不变
unsigned int a = 0x123d0c37;
unsigned int b = 0xf0;
unsigned int c;
c = a ^ b;
printf("a & b = 0x%x.n", c);//0x123d0cc7.
/*
// 把一个寄存器值的bit4~bit7置1,其他位不变
unsigned int a = 0x123d0cd7;
unsigned int b = 0xf0;
unsigned int c;
c = a | b;
printf("a & b = 0x%x.n", c);
*/
/*
// 把一个寄存器值的bit13~21清0,其他位不变
unsigned int a = 0x123d0c57;
unsigned int b = 0xffc01fff;
unsigned int c;
c = a & b;
printf("a & b = 0x%x.n", c); // 0x12000c57.
*/
}
*/}
使用宏对变量a的bit n 位进行置位,清0,取反操作
假设有一个整数为x,编写三个将x的二进制位的第n位置1、清零、取反,其他位不变。
1.清零
如有x=10,二进制表示为:
00000000 00000000 00000000 00001010,二进制位的最右边称为第一位,比如将第二位的1清为0,则为:
00000000 00000000 00000000 00001000 = 8,
将第三位置为1,则为: 00000000 00000000 00000000 00001110 = 14。
将第一位取反,则为: 00000000 00000000 00000000 00001011 = 11。
#include
using namespace std;
#define IBS(n) 0x01<<(n-1)
void Set_N_To_1(int &x, int n)
{
x |= IBS(n);
}
void Clear_N_To_0(int &x, int n)
{
x &= ~IBS(n);
}
void Negate_N(int &x, int n)
{
x ^= IBS(n);
}
int main()
{
int x = 10;
Set_N_To_1(x, 3);
cout<
x = 10;
Clear_N_To_0(x, 2);
cout<
x = 10;
Negate_N(x, 1);
cout<
return 0;
}
#include
using namespace std;
#define Clear_N_To_0(x, n) (x & (~(1 << (n-1))))
#define Set_N_To_1(x, n) (x | (1 << (n-1)))
#define Negate_N(x, n) (x ^ (1 << (n-1)))
int main()
{
cout << Clear_N_To_0(10, 2) << endl;
cout << Set_N_To_1(10, 3) << endl;
cout << Negate_N(10, 1) << endl;
return 0;
}
注宏定义中的n-1,只是为了更好理解,比如第一位置就是Set_N_To_1(x, 1),从下标1开始计数
2.strcpy() 函数 标准实现
C语言标准库函数
原型声明:extern char* strcpy(char *dst,const char *src);
头文件:string.h
功能:把src所指由NULL结束的字符串复制到dst所指的数组中。
说明:src和dst所指内存区域不可以重叠且dst必须有足够的空间来容纳src的字符串。
返回指向dst的指针。
strcpy函数将str拷贝至输出参数dst中,同时函数的返回值又是dst。这样做并非多此一举,可以获得如下灵活性:
char str[20];
int length = strlen( strcpy(str, “Hello World”) );
作用:为了生成链式表达式。
/*
C语言标准库函数strcpy的一种典型的工业级的最简实现
返回值:
返回目标串的地址。
对于出现异常的情况ANSI-C99标准并未定义,故由实现者决定返回值,通常为NULL。
参数:
目标串
dest
源串
str
*/
char* strcpy(char* dst, const char* str)
{
//1.断言
assert(dst != NULL && str != NULL);
//2.使用ret指向dst字符串
char* ret = dst;
//3.复制
while(*str != '