sscanf() 的问题不会读取 char 数组中的每个 0
Problem with sscanf() doesn't read every 0 that is in char array
我需要从我的 char 数组中提取数字,它以 hh:mm 格式存储值(示例 20:20)
我尝试使用 sscanf 函数将 hh 提取到小时变量中,将 mm 提取到分钟变量中。
它工作得很好,直到时间像 0number:0number 或者如果它是 00:00 ..它只有 returns 没有 0 或只有一个 0 的数字。是否有可能当它读取时第一个 0 它把它当作别的东西,而不是数组值的一部分?谢谢你的回答。
char time[15]; ///where I store the time value
Serial.println(time); //prints nicely something like 02:02
int hour;
int minute;
sscanf(incas,"%02d:%02d",&hour,&minute);
Serial.println(hour); ///prints 2
Serial.println(minute); ///prints 2
int
对前导零一无所知。 0000000000000123 == 123
。如果你想要前导零,你必须自己格式化。
将 hour
和 minute
转换回 char
数组的示例:
char out[15];
sprintf(out, "%02d:%02d", hour, minute);
Serial.println(out);
问题不在于您对 sscanf
的调用,而在于对 println
的调用。试试这个:
char time[15]; ///where I store the time value
Serial.println(time); //prints nicely something like 02:02
int hour;
int minute;
sscanf(incas,"%02d:%02d",&hour,&minute);
char strBuf[3];
sprintf(strBuf, "%02d", hour);//hour is an int, so you need to pad with leading 0's
Serial.println(strBuf); ///prints 2
sprintf(strBuf, "%02d", minute);
Serial.println(strBuf); ///prints 2
我需要从我的 char 数组中提取数字,它以 hh:mm 格式存储值(示例 20:20) 我尝试使用 sscanf 函数将 hh 提取到小时变量中,将 mm 提取到分钟变量中。 它工作得很好,直到时间像 0number:0number 或者如果它是 00:00 ..它只有 returns 没有 0 或只有一个 0 的数字。是否有可能当它读取时第一个 0 它把它当作别的东西,而不是数组值的一部分?谢谢你的回答。
char time[15]; ///where I store the time value
Serial.println(time); //prints nicely something like 02:02
int hour;
int minute;
sscanf(incas,"%02d:%02d",&hour,&minute);
Serial.println(hour); ///prints 2
Serial.println(minute); ///prints 2
int
对前导零一无所知。 0000000000000123 == 123
。如果你想要前导零,你必须自己格式化。
将 hour
和 minute
转换回 char
数组的示例:
char out[15];
sprintf(out, "%02d:%02d", hour, minute);
Serial.println(out);
问题不在于您对 sscanf
的调用,而在于对 println
的调用。试试这个:
char time[15]; ///where I store the time value
Serial.println(time); //prints nicely something like 02:02
int hour;
int minute;
sscanf(incas,"%02d:%02d",&hour,&minute);
char strBuf[3];
sprintf(strBuf, "%02d", hour);//hour is an int, so you need to pad with leading 0's
Serial.println(strBuf); ///prints 2
sprintf(strBuf, "%02d", minute);
Serial.println(strBuf); ///prints 2