字符串处理函数C语言

1.大写转换为小写字符串:
void Upper2Lower(unsigned char *code,unsigned char *code1)
{
uint16 src_len = 0;
uint16 i = 0;

 src_len =strlen(code);  //获取字符的长度
 
 for(i= 0;i < src_len;i++)
 {
      if( code[i] >='A' && code[i] <= 'Z' )
      {
          code1[i] = code[i] + 'a' -'A';
      }
      else
      {
          code1[i] = code[i];
      }
 }
 code[i] = '\0'; 

}

2.整型转为字符串:
char* int2stri(int n, char* s)
{
char temp[32];
int i=0;
int j=0;
int k=0;
int h=1;
if(n>0)
{
while (n>0)
{
temp[i++] = n%10;
n=n/10;
}
while(i–)
{
s[j++]=temp[i]+‘0’; //整数+可转换为字符
}
s[j]=’\0’;
}
else if(n == 0)
{
s[0]= n +‘0’;
}
else if(n < 0)
{
s[0]= ‘-’;
n = -1*n;
while (n>0)
{
temp[k++] = n%10;
n=n/10;
}
while(k–)
{
s[h++]=temp[k]+‘0’; //整数+可转换为字符
}
s[h]=’\0’;
}
return s;
}
3.字符串转为整型:
int str2int(uint8 *s)
{
int temp = 0;
int vl = 0;
uint8 flag = 0;

 if (s == NULL) return 0;
 
 while(*s != '\0')
 {
     if (*s == '-')
     {
         flag = 1;
         s++;
     }
     temp = *s-'0';
     vl = vl*10 + temp;
     s++;
 }
 return flag == 1 ? -vl:vl;

}
4.字符串中插入字符串:
void Intfun(unsigned char *str,unsigned char *src,uint8 n)//形参str为要插入的字符串,src为原字符串,n为插入的位置

{

uint8 src_len=0,str_len=0,src_str_len=0;
unsigned char p[300];       //临时存储
uint8 i = 0;
uint8 j=0;

src_len =strlen(src);  //获取字符的长度
str_len =strlen(str);
//src_str_len =src_len +str_len;
for(i= n;i < src_len;i++)
{
    p[j++]=src[i];        //缓存剩余字符
}

p[j]='\0';

i=n;
while(*str!= '\0')
{
    src[i++]=*str++;      //要衔接的值
}
src[i] = '\0';  
strcat(src,p); 

}
5.IP地址转换为Int型:
int IP_str2int(const char *IP)
{
uint32 uResult = 0;
uint32 nShift = 24;
uint32 temp = 0;
const unsigned char *pStart = IP;
const unsigned char *pEnd = IP;

while (*pEnd != '\0')
{
	while (*pEnd!='.' && *pEnd!='\0')
	{
		pEnd++;
	}
	temp = 0;
	for (pStart; pStart!=pEnd; ++pStart)
	{
		temp = temp * 10 + *pStart - '0';
	}	
	uResult += temp<<nShift;
	nShift -= 8;
	if (*pEnd == '\0')
		break;
	pStart = pEnd + 1;
	pEnd++;
}
return uResult;

}
6.16进制的数组转为字符串:
const unsigned char Num2CharTable[16] = “0123456789ABCDEF”;
void HexArrayToString(unsigned char *hexarray,int length,unsigned char *string)
{
int i = 0;

while(i < length)
{
    *(string++) = Num2CharTable[(hexarray[i] >> 4) & 0x0f];
	*(string++) = Num2CharTable[hexarray[i] & 0x0f];
	i++;
}
*string = 0x0;

}
7.取出除去不要的部分字符串。
int DeChunk(char * input, char * output, uint16_t *outlen , char firstflg)
{
char *input_tmp = input;
char *input_tmp_bak;
char output_tmp = output;
char bytelen, i;
short datalen = 0;
char datalen_tmp;
//test_i++;
if(firstflg)
{
if(memcmp((void
)input_tmp, “HTTP/1.1 200 OK”, 15))
{
return -1;
}
input_tmp = strstr(input_tmp, “\r\n\r\n”);
if(NULL == input_tmp)
{
return -2;
}
input_tmp += 4;

    *outlen = 0;
}
input_tmp_bak = input_tmp;
input_tmp = strstr(input_tmp, "\r\n");
if(NULL == input_tmp)
{
    return -3;
}
bytelen = input_tmp - input_tmp_bak;
if(bytelen > 3)
{
    return -4;
}
for(i = 0; i < bytelen; i++)
{
    if(input_tmp_bak[i]>='0'&&input_tmp_bak[i]<='9')
	datalen_tmp=input_tmp_bak[i]-'0';
	if(input_tmp_bak[i]>='a'&&input_tmp_bak[i]<='z')
	datalen_tmp=input_tmp_bak[i]-'a'+10;
	if(input_tmp_bak[i]>='A'&&input_tmp_bak[i]<='Z')
	datalen_tmp=input_tmp_bak[i]-'A'+10;
	datalen=datalen*16+datalen_tmp;
}
input_tmp += 2;
if(0 != datalen)
{
    memcpy(output_tmp, input_tmp, datalen);
    input_tmp += datalen+2;
    output_tmp += datalen;
    *outlen +=datalen;
    return DeChunk(input_tmp, output_tmp,outlen, 0);
}
else
{
    output_tmp[0] = '\0';
}
return 0;

}
8.查找子字符串在母字符串的出现的次数:
int Num0fstr(char *Mstr, char *substr)
{
int number = 0;

char *p;//
char *q;//

while(*Mstr != '\0')
{
    p = Mstr;
    q = substr;
   
    while((*p == *q)&&(*p!='\0')&&(*q!='\0'))
    {
        p++;
        q++; 
    } 
    if(*q=='\0')
    {
        number++; 
    }
    Mstr++;
}
return number;   

}
9.查找指定的地方,取出后面的字符串:
int findCJsonObjString(uint8_t *objroot, uint8_t *objname, uint8_t * output)
{
uint8_t rtn = 0;
uint8_t *pAddr = NULL;
uint8_t *pAddr_bakup = NULL;

uint16_t length =0;


pAddr = strstr(objroot, objname);
if(NULL == pAddr)
{
    return -1;
}
pAddr = strstr(pAddr, ":");
pAddr_bakup = strstr(pAddr, "\"");
pAddr_bakup += 1;
pAddr = strstr(pAddr_bakup, "\"");

length = pAddr - pAddr_bakup;
memcpy(output, pAddr_bakup, length);
output[length] = '\0';

return 0;

}

int findCJsonObjEvrey(uint8_t *objroot, uint8_t *objname, uint8_t * output)
{
uint8_t rtn = 0;
uint8_t *pAddr = NULL;
uint8_t *pAddr_bakup = NULL;

uint16_t length =0;


pAddr = strstr(objroot, objname);
if(NULL == pAddr)
{
    return -1;
}
pAddr = strstr(pAddr, "\r\n");
pAddr_bakup = strstr(pAddr, ":");
pAddr_bakup += 2;
pAddr = strstr(pAddr_bakup, "\"\r\n}");

length = pAddr - pAddr_bakup;
memcpy(output, pAddr_bakup, length);
output[length] = '\0';

return 0;

}

int findWebSocketObjString(uint8_t *objroot, uint8_t *objname, uint8_t * output)
{
uint8_t rtn = 0;
uint8_t *pAddr = NULL;
uint8_t *pAddr_bakup = NULL;

  uint16_t length =0;


  pAddr = strstr(objroot, objname);
  if(NULL == pAddr)
  {
      return -1;
  }
  pAddr = strstr(pAddr, ":");
  pAddr_bakup = strstr(pAddr, " ");
  pAddr_bakup += 1;
  pAddr = strstr(pAddr_bakup, "\r\n");

  length = pAddr - pAddr_bakup;
  memcpy(output, pAddr_bakup, length);
  output[length] = '\0';

  return 0;

}

10.字符串对比:strcmp
11.sprintf的用法:
void RTE_SettingTime(void)
{
uint8_t body[200];
uint16_t len = 0;
uint16_t lenbody;

    RTE_ReadTime();
    
    lenbody = sprintf(&body[0],"{\"time\": {\"utc\": \"%s-%s-%sT%s:%s:%sZ\"}}\r\n",Timeyear,TimeMonth,TimeDay,TimeHour,TimeMinute,TimeSecond);
    len += sprintf(&rem_LEMWH_SetTiming_Data[len], "PUT /v1/settings HTTP/1.1\r\n");
    len += sprintf(&rem_LEMWH_SetTiming_Data[len], "Content-Type: application/json\r\n");
    len += sprintf(&rem_LEMWH_SetTiming_Data[len], "Content-Length: %d\r\n\r\n",lenbody);
    sprintf(&rem_LEMWH_SetTiming_Data[len], "%s",body);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Flying_Dan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值