一、将一个8bit数据(unsigned char 类型)的指定位的置0或者置1操作,并保持其他位不变。
若想要置1,那么就让它的指定位按位或1.
若想要置0,那么就让它的指定位按位与0.
void bit_set(unsigned char *p_date, unsigned char pos, int flag)
{
assert(pos >= 1 && pos <= 8);
if (flag == 1)
{
*p_date |= (1 << pos - 1);
}
if (flag == 0)
{
*p_date &= ~(1 << pos - 1);
}
}
int main()
{
int a = 127;
bit_set(&a, 8, 1);
printf("%d\n", a);
二、实现字符串到整数的转换,例如输入字符串“12345”,输出整数12345
也就是让我们模拟实现一下atoi函数,我么来看看这个函数:
头文件:#include<stdio.h>
原型: int atio(const char * string)
函数说明:参数 *string字符串,如果第一个非空格字符存在,是数字或者正负号那就开始做转化,之后检测到非数字(包括‘\0’)字符时,停止转换,返回整型数,否则,返回0.
实现这个函数我们还要用到两个标准库函数
1.isspace:
头文件<ctype.h>
原型:int isspace(int c)
2.isdigit
头文件:<ctype.h>
原型:int isdigit (int c)
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<ctype.h>
enum STATE
{
VALID,
INVALID
};
enum STATE state = INVALID;//state置为1
int my_atio(const char* str)
{
assert(str);
int flag = 1;
long long ret =0;
while (isspace(*str)) //看是否为空格
{
str++;
}
while (*str == '\0') //是否一个字符串里面只有空格
{
return 0;
}
if (*str == '+') //是否为正数
{
str++;
}
else if(*str == '-') //是否为负数
{
flag = -flag;
str++;
}
while(isdigit(*str)) //是否是0~9数字
{
ret = ret * 10 + flag*(*str - '0'); //将其转化为数字
if ((ret<INT_MIN) || (ret >INT_MAX))
{
return 0;
}
str++;
}
if (*str == '\0') //正常退出
{
return (int)ret;
}
else
return ret; //异常退出
}
int main()
{
char *p = " -123 ";
int ret = my_atio(p);
printf("%d\n", ret);
system("pause");
return 0;
}
