source\lib\math1.h.c__常用数学函数
来源:互联网 发布:阿里云 那个机房快 编辑:程序博客网 时间:2024/06/05 15:07
/****常用数学函数****/
/*****************************************************************************************
filename: math1.h
文件功能:
编 者:张永辉 2012年11月28日
修 改:张永辉 2013年03月04日
添 加:张永辉 2013年04月02日
2013年04月22日 添加异或函数
*****************************************************************************************/
#ifndef __MATH_1_H
#define __MATH_1_H
#include "basetype.h"
/****************************************************************************************/
void MathTest(void);
int MathCheckEndion(void); //检测大小端
char* MathItoa(int intvalue,char * str); //整型转字符串
int MathAtoi(const char * str); //字符串转整型
int MathStrCmp(const char *src ,const char *dst); //字符串比较大小
char* MathStrCopy(char *src ,const char *dst); //字符串复制
int MathStrIsHave(const char *src, const char *dst); //字符串查找是否有子串
unsigned int MathStrLen(const char *str); //字符串长度计算
void *MathMemSet(void *ptr,char c, unsigned int len); //内存填充
void *MathMemCopy(void *dest,void *src,unsigned int len); //内存复制
void *MathMemMove(void *dest,void *src,unsigned int len); //内存移动
char MathXor(char *xordata,u32 len); //求异或值
/*****************************************************************************************/
#endif
/*****************************************************************************************
filename:math1.c
平 台:VS2008 keillV4
*****************************************************************************************/
#include "math1.h" //#include "\embed\source\lib\math1.h"
/*****************************************************************************************
函数功能: 测试是大端还是小端模式
*****************************************************************************************/
void MathTest(void)
{
int i = 99;
char a[12];
i = MathCheckEndion();
if(i==0)
{ //大端模式
i = 100;
}else
{
//小端模式
i = 200;
}
MathItoa(-1,a);
MathItoa(0,a);
MathItoa(2147483647,a);
MathItoa(-2147483647,a);
MathItoa(0x80000000,a);
i = MathStrCmp("a" , "b"); //-1
i = MathStrCmp("a" , "ac"); //-1
i = MathStrCmp("abcd" , "abcd"); //0
i = MathStrLen("");
i = MathStrLen("asd");
MathStrCopy(a,"abcdef");
while(1);
}
/*****************************************************************************************
函数功能: 测试是大端还是小端模式
参数:无
返回:0 大端模式
1 小端模式 地址 数据 【低地址 放 低位数,假设i = 0x12345678】
0000 78
0001 56
0002 34
0003 12
*****************************************************************************************/
int MathCheckEndion(void)
{
union check
{
int i;
char ch;
}c;
c.i = 1;
return (c.ch);
}
/*****************************************************************************************
功能: 字符串转整型
输入:字符串可以是如下形式:
[空格 | Tab] + [+ | -] + {数值字符}如: " 123" "-334998"
返回:超过最值时返回最值
输入错误时返回0
******************************************************************************************/
#define M_INT_MAX 0x7FFFFFFF //最值定义
#define M_INT_MIN 0x80000000
int MathAtoi(const char * str)
{
char sign = 1;
char tmp = 0;
unsigned int vaule = 0;
if ( str == (void *)0)
{ return 0; }
//去掉空格和Tab
while (*str == ' ' || *str == '\t')
{
str++;
}
if(*str == '+' || *str == '-')
{
if (*str == '-')
{
sign -= 2; //即sign=-1,防止报警
}
str++;
}
//进行转换
while(('0'<= *str) && (*str <= '9'))
{
tmp = *str - '0';
//若超出范围则取最值
if ((M_INT_MAX /10 == vaule && tmp > M_INT_MAX %10) || (M_INT_MAX/10 <vaule))
{
return (sign > 0)?(M_INT_MAX):(M_INT_MIN);
}
vaule = vaule*10 + tmp;
str++;
}
return vaule *sign;
}
/*****************************************************************************************
功能: 整型转字符串
输入:数值 -2147 4836 47 < n < 2147 4836 47
返回:字符串 “-xxxx” 或 “xxx” 最长12位=符号+10位值+结束符
注意:*str 要足够长,否则访问越界
******************************************************************************************/
char* MathItoa(int intvalue,char * str)
{
char *pstr = str;
char tmp[12]; //暂存区
unsigned char i = 0; //计数器
if(intvalue < 0) //负数判断
{
*str++ = '-';
intvalue = intvalue*(-1);
}
tmp[i++] = '\0'; //结束符
do
{
tmp[i++] = intvalue%10 + '0';
intvalue = intvalue/10;
}while(intvalue!=0);
do //反序存入
{
*str++ = tmp[--i];
}while(i);
return pstr;
}
/*****************************************************************************************
功能: 字符串比较大小
输入:src dst 按照ASCII的值大小依次比较
返回:-1 src < dst
0 src = dst
1 src > dst
******************************************************************************************/
int MathStrCmp(const char *src ,const char *dst)
{
int ret = *(unsigned char*)src - *(unsigned char*)dst;;
while( (!ret) && *dst) //赋值在括号内会产生告警
{
ret = *(unsigned char*)src - *(unsigned char*)dst;
src++;
dst++;
}
if(ret < 0) //src < dst
{
return -1;
}else if(ret > 0) //src > dst
{
return 1;
}
return 0; //src > dst
}
/*****************************************************************************************
功能: 字符串长度计算
输入:src 指针
返回:字符串长度(不包括结束符)
******************************************************************************************/
unsigned int MathStrLen(const char *str)
{
unsigned int len = 0;
if(str == (const char *)0)
{
return 0;
}
while((*str++) != '\0')
{
len++;
}
return len;
}
/*****************************************************************************************
功能: 字符串复制
输入:src dst 指针
返回:src 指针
******************************************************************************************/
char* MathStrCopy(char *src ,const char *dst)
{
char * tmp = src;
if(src==(char *)0 || dst==(char *)0)
{
return (char *)0;
}
while((*src++ = *dst++) != '\0');
return tmp;
}
/*****************************************************************************************
功能: 在字符串中 找字串是否有出现字串
输入:源串,子串 都是字符串形式
输出:0:源串中没有子串
1: 源串中 有子串
******************************************************************************************/
int MathStrIsHave(const char *src, const char *dst)
{
const char *cdst;
const char *csrc;
//不能是空指针
if(src==0 || dst==0)
{
return 0;
}
//不能查找空串
if(*dst=='\0')
{
return 0;
}
//直到源串结束
while(*src != '\0')
{
cdst = dst;
csrc = src;
while(*csrc++ == *cdst++)
{
//到子串结束时,认为找到了
if (*cdst == '\0')
{
return 1;
}
}
src++;
}
return 0;
}
/*****************************************************************************************
功能: 把ptr所指内存区域的前count个字节设置成字符c
输入:指针,C,长度
输出:指针
******************************************************************************************/
void *MathMemSet(void *ptr,char c,unsigned int len)
{
void * start = ptr;
if (ptr == 0)
{
return (void*)0;
}
while(len--)
{
*(char*)ptr = (char)c;
ptr = (char*)ptr+1;
}
return start;
}
/*****************************************************************************************
功能: 内存复制
输入:目的指针,源指针,要复制的字节数
输出:目的指针
******************************************************************************************/
void *MathMemCopy(void *dest,void *src,unsigned int len)
{
char *start = dest;
if (dest==(void*)0 || src==(void*)0)
{
return (void*)0;
}
while(len--)
{
*(char *)dest = *(char*)src;
dest = (char *)dest+1;
src = (char *)src+1;
}
return start;
}
/*****************************************************************************************
功能: 内存移动
输入:目的指针,源指针,要复制的字节数
输出:目的指针
******************************************************************************************/
void *MathMemMove(void *dest,void *src,unsigned int len)
{
char *start = dest;
if (dest==(void*)0 || src==(void*)0)
{
return (void*)0;
}
if(dest < src || (char *)dest >= (char *)src + len )
{
while(len--)
{
*(char *)dest = *(char*)src;
dest = (char *)dest+1;
src = (char *)src+1;
}
}else
{ //此处,解决内存重复的现象。与MathMemCopy的区别也是在此
dest = (char *)dest+len -1;
src = (char *)src+len -1;
while(len--)
{
*(char *)dest = *(char*)src;
dest = (char *)dest-1;
src = (char *)src-1;
}
}
return start;
}
/*****************************************************************************************
功能: 按字节求异或值
输入:目的指针,长度
输出:求得的值
******************************************************************************************/
char MathXor(char *xordata,u32 len)
{
u32 i = 0;
char xor = 0;
while(len--)
{
xor = xor ^ xordata[i++];
}
return xor;
}
- source\lib\math1.h.c__常用数学函数
- source\FatFs\fftest.h.c__测试FAT文件系统
- math.h常用数学函数
- iOS math.h 常用数学函数
- iOS math.h 常用数学函数
- iOS math.h 常用数学函数
- iOS math.h 常用数学函数
- ios math.h 常用数学函数
- IOS-升级103 iOS math.h 常用数学函数
- 数学函数<math.h>
- 数学函数<math.h>
- 洛谷 P2788 数学1(math1)- 加减算式
- 1.数学函数,math.h
- source\lib\modfifo.h.c --自主设计FIFO示例
- C__函数中的静态变量_static
- string.h常用函数
- matlab 常用数学函数
- 常用数学函数
- JS实现div内部的文字或图片自动循环滚动
- Acitivity透明
- mysql出现“Every derived table must have its own alias”
- FFMpeg中apiexample.c例子分析——解码分析
- 小笔记
- source\lib\math1.h.c__常用数学函数
- paip.破解网站手机验证码
- 使用Struts 2将Java对象序列化成JSON
- android中VoiceRecognition的使用
- android intent的理解
- 汇编02-8086/8088寻址方式和指令系统
- android Button 监听的几种方式
- IOS开发之手势——UIGestureRecognizer 共存
- 原版的firefox