L
lncd
Unregistered / Unconfirmed
GUEST, unregistred user!
以前做dephi积累了一个较为丰富函数库,现把它转为C,完成的函数我会不断发布。
大富翁的兄弟们看看有需要的函数请提出来,我试着写。
因为刚学C不久,代码可能错漏百出。
希望各位兄弟姐妹多提宝贵意见。
(当然不会白提,我有分相谢啦。)
/*
文件名:communal.h
发布版本:0.12
发布时间:2003.12.16
*/
#include <stdio.h>
#include <string.h>
char * strcpyx(const char *s1,char *s2,unsigned int StartPos,unsigned int len);
char * Replace(const char *SourStr,char *DestStr,const char *s1,const char *s2);
char * RStr(const char *SourStr,char *DestStr,unsigned int len);
char * LStr(const char *SourStr,char *DestStr,unsigned int len);
char * RTrim(const char *SourStr,char *DestStr);
char * LTrim(const char *SourStr,char *DestStr);
char * TurnStr2(const char *SourStr,char *DestStr);
char * TurnStr(char *str);
char * IntToStr(int Value,char *str);
unsigned int pos(const char *SubStr,const char *DestStr);
unsigned char istoASCs(unsigned char* desBuffer,unsigned char* srcBuffer,int len);
int StrToEBCD(char *buf,char *ucBuffer,int BufLen);
/*
功能说明:
把s1中从指定位置开始的指定长度字符串复制到s2中
参数说明:
s1:原字符串
s2:目标字符串
s1:复制的起始位置
len:复制长度
返回值:
返回取得的字符串s2
*/
char * strcpyx(const char *s1,char *s2,unsigned int StartPos,unsigned int len)
{
unsigned int i=StartPos;
for (i=StartPos;i<StartPos+len &&
s1!='/0';i++)
{
s2[i-StartPos] = s1;
}
s2[i-StartPos]='/0';
return s2;
}
/*
功能说明:
替换字符串中指定的内容
参数说明:
SourStr:原字符串
DestStr:替换后的字符串
s1:被替换的子串
s2:替换s1的子串
返回值:
返回替换完成后的字符串
*/
char * Replace(const char *SourStr,char *DestStr,const char *s1,const char *s2)
{
//尚未完成...
int i=0;
int j=0;
DestStr[0]='/0';
while (i=pos(s1,SourStr))
{
j=i;
}
return DestStr;
}
/*
功能说明:
从右端截取指定长度的字符串
参数说明:
str:原字符串
len:截取长度
返回值:
返回截取指定长度的字符串
*/
char * RStr(const char *SourStr,char *DestStr,unsigned int len)
{
int i;
int j=0;
len = len>strlen(SourStr) ? strlen(SourStr) : len;
for (i=strlen(SourStr)-len;
SourStr != '/0';
i++)
{
DestStr[j]=SourStr;
j++;
}
DestStr[j]='/0';
return DestStr;
}
/*从左端截取指定长度的字符串*/
char * LStr(const char *SourStr,char *DestStr,unsigned int len)
{
if (len>strlen(SourStr))
len=strlen(SourStr);
if (len==0)
{
*DestStr='/0';
}
else
{
strcpy(DestStr,SourStr);
*(DestStr+len)='/0';
}
return DestStr;
}
/*截去一个字符串的右端空格*/
char * RTrim(const char *SourStr,char *DestStr)
{
int i;
strcpy(DestStr,SourStr);
for (i=strlen(DestStr)-1;i>=0;i--)
{
if (DestStr==' ')
DestStr='/0';
else
break;
}
return DestStr;
}
/*截去一个字符串的左端空格*/
char * LTrim(const char *SourStr,char *DestStr)
{
unsigned int i=0;
int flag=0;
for (i=0;i<strlen(SourStr);i++)
{
if (SourStr==' ')
i++;
else
break;
}
return strcpyx(SourStr,DestStr,i,strlen(SourStr)-i);
}
/*前后翻转一个字符串*/
char * TurnStr2(const char *SourStr,char *DestStr)
{
int i;
int len=strlen(SourStr);
for (i=0;i<len;i++)
{
*(DestStr+i)=*(SourStr+len-i-1);
}
*(DestStr+len)='/0';
return DestStr;
}
/*前后翻转一个字符串*/
char * TurnStr(char *str)
{
char temp;
int i=0;
int j=strlen(str)-1;
for (i=0;i<j;i++,j--)
{
temp=str;
str=str[j];
str[j]=temp;
}
return str;
}
/*把一个整数转化为一个字符串*/
char * IntToStr(int Value,char *str)
{
int i=0;
int minus=0;//负号
if (Value==0)
{
str='0';
i++;
}
if (Value<0)
{
minus=1;
Value=abs(Value);
}
while (Value>=1)
{
switch (Value % 10)
{
case 0:str='0';break;
case 1:str='1';break;
case 2:str='2';break;
case 3:str='3';break;
case 4:str='4';break;
case 5:str='5';break;
case 6:str='6';break;
case 7:str='7';break;
case 8:str='8';break;
case 9:str='9';break;
}
Value=Value/10;
i++;
}
if (minus)
{
str='-';
i++;
}
str='/0';
return TurnStr(str);
}
/*
判断SubStr是否包含在DestStr中,
存在返回SubStr第一次出现的位置,不存在返回0
*/
unsigned int pos(const char *SubStr,const char *DestStr)
{
unsigned int i,j;
for (i=0;i<strlen(DestStr);i++)
{
if (DestStr==SubStr[0])
{
for (j=0;j<strlen(SubStr);j++)
{
if (j==(strlen(SubStr)-1))
return i+1;
else
if (DestStr[i+j]!=SubStr[j])
break;
}
}
}
return 0;
}
//十六进制转换为压缩BCD码
// convert {0x4c,0x5e,0x33} to "4c5e33"
unsigned char istoASCs(unsigned char* desBuffer,unsigned char* srcBuffer,int len)
{ int i;
char ch;
for(i=0;i<len;i++)
{
ch = srcBuffer >> 4;
if((ch >= 0)&&(ch <= 9))
{
desBuffer[2*i] = ch +'0';
}
else
if((ch >=10)&&(ch <= 15))
{
desBuffer[2*i] = ch + 55;
}
else
desBuffer[2*i] = '*';
ch = srcBuffer &
0x0F;
if((ch >= 0)&&(ch <= 9))
{
desBuffer[2*i+1] = ch +'0';
}
else
if((ch >=10)&&(ch <= 15))
{
desBuffer[2*i+1] = ch + 55;
}
else
desBuffer[2*i+1] = '*';
}
desBuffer[2*i] = '/0';
return 0;
}
//压缩BCD码转换为十六进制
//89860099--->0x89,0x86,0x00,0x99
int StrToEBCD(char *buf,char *ucBuffer,int BufLen)
{ unsigned char temp1,temp2;
int Len=BufLen/2,i;
for (i=0;i<Len;i++)
{
temp1=buf[i*2];
if (temp1>='a')
temp1=temp1 - 'a' + 10;
if (temp1>='A')
temp1=temp1 - 'A' + 10;
if (temp1>='0')
temp1=temp1-'0';
temp2=buf[i*2 + 1];
if (temp2>='a')
temp2=temp2 - 'a' + 10;
if (temp2>='A')
temp2=temp2 - 'A' + 10;
if (temp2>='0')
temp2=temp2-'0';
ucBuffer=((temp1&0x0f)<<4)|(temp2&0x0f);
}
return 0;
}
大富翁的兄弟们看看有需要的函数请提出来,我试着写。
因为刚学C不久,代码可能错漏百出。
希望各位兄弟姐妹多提宝贵意见。
(当然不会白提,我有分相谢啦。)
/*
文件名:communal.h
发布版本:0.12
发布时间:2003.12.16
*/
#include <stdio.h>
#include <string.h>
char * strcpyx(const char *s1,char *s2,unsigned int StartPos,unsigned int len);
char * Replace(const char *SourStr,char *DestStr,const char *s1,const char *s2);
char * RStr(const char *SourStr,char *DestStr,unsigned int len);
char * LStr(const char *SourStr,char *DestStr,unsigned int len);
char * RTrim(const char *SourStr,char *DestStr);
char * LTrim(const char *SourStr,char *DestStr);
char * TurnStr2(const char *SourStr,char *DestStr);
char * TurnStr(char *str);
char * IntToStr(int Value,char *str);
unsigned int pos(const char *SubStr,const char *DestStr);
unsigned char istoASCs(unsigned char* desBuffer,unsigned char* srcBuffer,int len);
int StrToEBCD(char *buf,char *ucBuffer,int BufLen);
/*
功能说明:
把s1中从指定位置开始的指定长度字符串复制到s2中
参数说明:
s1:原字符串
s2:目标字符串
s1:复制的起始位置
len:复制长度
返回值:
返回取得的字符串s2
*/
char * strcpyx(const char *s1,char *s2,unsigned int StartPos,unsigned int len)
{
unsigned int i=StartPos;
for (i=StartPos;i<StartPos+len &&
s1!='/0';i++)
{
s2[i-StartPos] = s1;
}
s2[i-StartPos]='/0';
return s2;
}
/*
功能说明:
替换字符串中指定的内容
参数说明:
SourStr:原字符串
DestStr:替换后的字符串
s1:被替换的子串
s2:替换s1的子串
返回值:
返回替换完成后的字符串
*/
char * Replace(const char *SourStr,char *DestStr,const char *s1,const char *s2)
{
//尚未完成...
int i=0;
int j=0;
DestStr[0]='/0';
while (i=pos(s1,SourStr))
{
j=i;
}
return DestStr;
}
/*
功能说明:
从右端截取指定长度的字符串
参数说明:
str:原字符串
len:截取长度
返回值:
返回截取指定长度的字符串
*/
char * RStr(const char *SourStr,char *DestStr,unsigned int len)
{
int i;
int j=0;
len = len>strlen(SourStr) ? strlen(SourStr) : len;
for (i=strlen(SourStr)-len;
SourStr != '/0';
i++)
{
DestStr[j]=SourStr;
j++;
}
DestStr[j]='/0';
return DestStr;
}
/*从左端截取指定长度的字符串*/
char * LStr(const char *SourStr,char *DestStr,unsigned int len)
{
if (len>strlen(SourStr))
len=strlen(SourStr);
if (len==0)
{
*DestStr='/0';
}
else
{
strcpy(DestStr,SourStr);
*(DestStr+len)='/0';
}
return DestStr;
}
/*截去一个字符串的右端空格*/
char * RTrim(const char *SourStr,char *DestStr)
{
int i;
strcpy(DestStr,SourStr);
for (i=strlen(DestStr)-1;i>=0;i--)
{
if (DestStr==' ')
DestStr='/0';
else
break;
}
return DestStr;
}
/*截去一个字符串的左端空格*/
char * LTrim(const char *SourStr,char *DestStr)
{
unsigned int i=0;
int flag=0;
for (i=0;i<strlen(SourStr);i++)
{
if (SourStr==' ')
i++;
else
break;
}
return strcpyx(SourStr,DestStr,i,strlen(SourStr)-i);
}
/*前后翻转一个字符串*/
char * TurnStr2(const char *SourStr,char *DestStr)
{
int i;
int len=strlen(SourStr);
for (i=0;i<len;i++)
{
*(DestStr+i)=*(SourStr+len-i-1);
}
*(DestStr+len)='/0';
return DestStr;
}
/*前后翻转一个字符串*/
char * TurnStr(char *str)
{
char temp;
int i=0;
int j=strlen(str)-1;
for (i=0;i<j;i++,j--)
{
temp=str;
str=str[j];
str[j]=temp;
}
return str;
}
/*把一个整数转化为一个字符串*/
char * IntToStr(int Value,char *str)
{
int i=0;
int minus=0;//负号
if (Value==0)
{
str='0';
i++;
}
if (Value<0)
{
minus=1;
Value=abs(Value);
}
while (Value>=1)
{
switch (Value % 10)
{
case 0:str='0';break;
case 1:str='1';break;
case 2:str='2';break;
case 3:str='3';break;
case 4:str='4';break;
case 5:str='5';break;
case 6:str='6';break;
case 7:str='7';break;
case 8:str='8';break;
case 9:str='9';break;
}
Value=Value/10;
i++;
}
if (minus)
{
str='-';
i++;
}
str='/0';
return TurnStr(str);
}
/*
判断SubStr是否包含在DestStr中,
存在返回SubStr第一次出现的位置,不存在返回0
*/
unsigned int pos(const char *SubStr,const char *DestStr)
{
unsigned int i,j;
for (i=0;i<strlen(DestStr);i++)
{
if (DestStr==SubStr[0])
{
for (j=0;j<strlen(SubStr);j++)
{
if (j==(strlen(SubStr)-1))
return i+1;
else
if (DestStr[i+j]!=SubStr[j])
break;
}
}
}
return 0;
}
//十六进制转换为压缩BCD码
// convert {0x4c,0x5e,0x33} to "4c5e33"
unsigned char istoASCs(unsigned char* desBuffer,unsigned char* srcBuffer,int len)
{ int i;
char ch;
for(i=0;i<len;i++)
{
ch = srcBuffer >> 4;
if((ch >= 0)&&(ch <= 9))
{
desBuffer[2*i] = ch +'0';
}
else
if((ch >=10)&&(ch <= 15))
{
desBuffer[2*i] = ch + 55;
}
else
desBuffer[2*i] = '*';
ch = srcBuffer &
0x0F;
if((ch >= 0)&&(ch <= 9))
{
desBuffer[2*i+1] = ch +'0';
}
else
if((ch >=10)&&(ch <= 15))
{
desBuffer[2*i+1] = ch + 55;
}
else
desBuffer[2*i+1] = '*';
}
desBuffer[2*i] = '/0';
return 0;
}
//压缩BCD码转换为十六进制
//89860099--->0x89,0x86,0x00,0x99
int StrToEBCD(char *buf,char *ucBuffer,int BufLen)
{ unsigned char temp1,temp2;
int Len=BufLen/2,i;
for (i=0;i<Len;i++)
{
temp1=buf[i*2];
if (temp1>='a')
temp1=temp1 - 'a' + 10;
if (temp1>='A')
temp1=temp1 - 'A' + 10;
if (temp1>='0')
temp1=temp1-'0';
temp2=buf[i*2 + 1];
if (temp2>='a')
temp2=temp2 - 'a' + 10;
if (temp2>='A')
temp2=temp2 - 'A' + 10;
if (temp2>='0')
temp2=temp2-'0';
ucBuffer=((temp1&0x0f)<<4)|(temp2&0x0f);
}
return 0;
}