【发布时间】:2021-10-08 15:56:24
【问题描述】:
如何将字符串拆分为 2 个字节乘以 2 个字节。我想从字符串中获取时间信息作为整数值。
char buffer[10]= "101507";
int hour = < 10
int min = < 15
int sec = < 07
【问题讨论】:
-
您可以实施其中的哪些部分,您需要哪些帮助?
如何将字符串拆分为 2 个字节乘以 2 个字节。我想从字符串中获取时间信息作为整数值。
char buffer[10]= "101507";
int hour = < 10
int min = < 15
int sec = < 07
【问题讨论】:
您可以使用sscanf() function,为您的三个变量中的每一个指定字段宽度为2:
#include <stdio.h>
int main()
{
char buffer[10] = "101507";
int hour, min, sec;
if (sscanf(buffer, "%2d%2d%2d", &hour, &min, &sec) != 3) {
printf("Error reading data\n");
}
else {
printf("Hour = %02d, Min = %02d, Sec = %02d\n", hour, min, sec);
}
return 0;
}
【讨论】:
您可以直接对单个字符进行计算。只需减去'0' 即可得到数值。喜欢
char buffer[10]= "101507";
int hour = 10 * (buffer[0] - '0') + (buffer[1] - '0');
int min = 10 * (buffer[2] - '0') + (buffer[3] - '0');
int sec = 10 * (buffer[4] - '0') + (buffer[5] - '0');
或者写一个简单的函数,接受两个字符作为参数
int chars_to_int(char msd, char lsd)
{
return 10 * (msd - '0') + (lsd - '0');
}
char buffer[10]= "101507";
int hour = chars_to_int(buffer[0], buffer[1]);
int min = chars_to_int(buffer[2], buffer[3]);
int sec = chars_to_int(buffer[4], buffer[5]);
或编写一个以 char 指针为参数的简单函数
int chars_to_int(char* p)
{
return 10 * (p[0] - '0') + (p[1] - '0');
}
char buffer[10]= "101507";
int hour = chars_to_int(&buffer[0]);
int min = chars_to_int(&buffer[2]);
int sec = chars_to_int(&buffer[4]);
【讨论】:
#include <stdio.h>
#define BARF(m) fprintf(stderr,"Barf: %s\n", m)
int main(int argc, char **argv)
{
unsigned val;
char *str = argv[1] ? argv[1] :"101507";
int hh,mm,ss;
for(val=0; *str; str++) {
if (*str < '0' || *str > '9') {BARF(str); continue;}
val *= 10; val += (*str - '0');
}
ss = val % 100; val /= 100;
mm = val % 100; val /= 100;
hh = val % 100;
printf("%02d:%02d:%02d\n", hh, mm, ss);
return 0;
}
【讨论】: