在做jpeg codec的时候,经常需要输入图片的大小,即长和宽。对于一个jpeg图片,它的大小几乎是任意的,所以只能用数字来表示,而不能选择cif,qcif等这类固定的图片格式。在用数字表示图片大小时,大家都习惯使用象176x144这样格式。为了获取长和宽,需要解析这个字符串。
下面,简单介绍一下在c语言中如何对176x144的解析。
#include <stdlib.h>
int main()
{
char *str = "176x144";
char *pDest;
char strTmp[100];
int g_pic_wid,g_pic_hei;
//将str所指字符串拷贝一份,存储在strTmp中,以供解析width
strcyp(strTmp,str);
//在strTmp中找到最后一个,即第一个出现的'x'的位置
pDest = strrchr((const char*)strTmp,(int)'x');
if(pDest)//如过找到了'x'
{
*pDest = '/0';//strTmp中的数据为“176/0144”,即截断了后面的数据
//将“176”转化为int类型
g_pic_wid = atoi(strTmp);
//在str中找到最后一个,即第一个出现的'x'的位置
pDest = strrchr((const char *)str, (int)'x');
if(!pDest)
pDest = str;
else
pDest++;//如果找到了,指向'x'的下一个位置
//将从pDest所指的位置往后的数据(即“144/0”)拷贝到strTmp中
strcyp(strTmp, pDest);
//将“144”转化为int类型
g_pic_hei = atoi(strTmp);
}
printf("pictrue width:%d, height:%d !/n",g_pic_wid, g_pic_hei);
pDest = NULL;
return 0;
}
这段函数中,大家可能对strrchr函数不大熟悉,下面将会对其做一个详细的介绍。
/*
Finds the last occurrence of ch in string. The terminating null character is used as
part of the search.
查找在字符串中最后一次出现字符’ch’的位置。如果str中存在字符ch,返回出现ch的位置的指针;
否则返回NULL。
*/
#include <stdlib.h>
char * my_strrchr(const char * str,int ch)
{
char *p = (char *)str;
while (*str) str++;
while (str-- != p && *str != (char)ch);
if (*str == (char)ch)
return( (char *)str );
return(NULL);
}
int main()
{
char *str = "ammana_babi";
char * p;
char ch;
ch = '9';
p = (char *)my_strrchr(str,ch);
if(p == NULL)
printf("Can't find the character %c !/n",ch);
else
printf("Find the character %c !/n",*p);
ch = 'b';
p = (char *)my_strrchr(str,ch);
if(p == NULL)
printf("Can't find the character %c !/n",ch);
else
printf("Find the character %c !/n",*p);
system("pause");
return 0;
}
更多请看:http://www.chituwang.com/Article/IT/detail.aspx?articleid=18092