初涉android, 有很多从配置文件或者系统文件里读取数据,但都是属于字符串类型,实际使用的时候需要转化为整型数据输出的,下面是我工作中的一个从文件里读取包含版本信息、和编译日期转化为数据输出的例子
void GetSoftwareVersion(unsigned char *data)
{
char prop_value[PROPERTY_VALUE_MAX];
char wday[][4] = {"sun","mon","tue","wen","thu","fri","sat"};
char tmp[4];
char *token = NULL;
const char *strDelimit = ".";
int i = 0;
memset(prop_value, '\0', PROPERTY_VALUE_MAX);
property_get("ro.build.version",prop_value,"VERSION_ERROR"); // 读取ro.build.version 代表的版本信息,字符串类型
LOGD("skyver = %s",prop_value);
if (strcmp(prop_value, "\0") != 0)
{
tmp[i] = 0;
token = strtok(prop_value, strDelimit); // 字符串的数据之间用点.分割,这里把数据取出来
while (token != NULL)
{
tmp[i] = strtoul(token, 0, 16)|tmp[i]<<4; //转化为16进制数据保存
token = strtok(NULL, strDelimit);
}
i++;
}
memset(prop_value, '\0', PROPERTY_VALUE_MAX);
property_get("ro.build.date.utc",prop_value,"VERSION_ERROR"); //读取UTC 时间
{
time_t timep = atoi(prop_value); // 把字符串形式的时间转化为int,并赋给时间变量
struct tm *p; //定义
//if(strcmp(prop_value, "VERSION_ERROR"))
p = localtime(&timep); //转化为时间结构,其结构在后面解析
LOGD("%d %02d %02d",1900+p->tm_year,1+p->tm_mon,p->tm_mday);
LOGD("%s %02d: %02d: %02d",wday[p->tm_wday],p->tm_hour,p->tm_min,p->tm_sec);
tmp[i++] = (((1+p->tm_mon)/10)<<4)+(1+p->tm_mon)%10;
tmp[i++] = ((p->tm_mday/10)<<4)+p->tm_mday%10;
tmp[i] = '\0';
}
memcpy(data, tmp,sizeof(tmp));
}
struct tm
{ int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_year; int tm_wday; int tm_yday; int tm_isdst; }; int tm_sec 代表目前秒数,正常范围为0-59,但允许至61秒 int tm_min 代表目前分数,范围0-59 int tm_hour 从午夜算起的时数,范围为0-23 int tm_mday 目前月份的日数,范围01-31 int tm_mon 代表目前月份,从一月算起,范围从0-11 int tm_year 从1900 年算起至今的年数 int tm_wday 一星期的日数,从星期一算起,范围为0-6 int tm_yday 从今年1月1日算起至今的天数,范围为0-365 int tm_isdst 日光节约时间的旗标 此函数返回的时间日期未经时区转换,而是UTC时间。 返回值 返回结构tm代表目前UTC 时间