我正在尝试使用sprintf()为C++中的arduino项目格式化一个char数组我的目标是格式化以下整数:日,月,年,小时,分钟和秒进入以下
DD/MM/YYYY HH:MM:SS
当一个整数<10时,我的问题就出现了.我尝试用下面的sprintf修改格式
sprintf (timeStr, "%c%u/%c%u/%u %c%u:%c%u:%c%u",(monthDay>0 && monthDay<=9)?'0':'',monthDay,(month>0 && month<=9)?'0':'',month,year,(hour>0 && hour<=9)?'0':'',hour,(minute>0 && minute<=9)?'0':'',minute,(second>0 && second<=9)?'0':'',second);
Run Code Online (Sandbox Code Playgroud)
现在这不会编译,因为我得到"空字符常量",我认为它来自''没有合法价值.
如果语句中的%c是有条件的并且我只想要一个值<10,那么我就会被困在如何使用sprintf来格式化字符串
如果有人对我如何实现这一目标有任何了解,我会非常感激,因为我真的被它坚持了!
谢谢!
你是正确的,%c需要一个角色(顺便说一句,空''的不是).
但是,如果你在零填充之后,只需使用格式说明符"%02d"?这就是你通常获得零填充数字的方式.换句话说,使用:
sprintf (timeStr, "%02d/%02d/%04d %02d:%02d:%02d",
monthDay, month, year, hour, minute, second);
Run Code Online (Sandbox Code Playgroud)
许多嵌入式系统可能会排除浮点说明符(或者可能使它们成为可选项)以保留空间,但零填充或空间填充整数是一个相当简单的操作,它们都应该具有.
如果您发现某个实现非常缺乏而不支持它们,则可以使用字符串而不是字符,因为空字符串是有效的:
sprintf (timeStr, "%s%d/%s%d/%d %s%d:%s%d:%s%d",
(monthDay < 10) ? "0" : "",
monthDay,
:
and so on ...
Run Code Online (Sandbox Code Playgroud)
但我很确定Arduino不是那么缺乏.