我希望将数字12转换为0012,以便数字始终为4个字符长度。我尝试使用以下代码:
int number;
int result;
void setup() {
number = 12;
Serial.begin(9600);
result = printf("%03d", number);
}
void loop() {
Serial.println(result);
}
然而,这段代码输出的是-1,而不是0012。这段代码有什么问题?
整数不能识别前导零等格式。
存储这种类型的信息的唯一方法是使用字符串(例如 char[]
而不是整数),但是看起来您只是写出该值,因此您不需要一个变量来存储它(因为 printf()
将为您处理)。
// %04d% will pad your number to 4 digits
printf("%04d", number);
如果您确实需要存储您的值,您可以使用 sprintf()
,并将您的 result
声明如下:
int number;
char *result = malloc(5);
然后在你的setup()
函数中将其设置如下:
sprintf(result, "%04d", number);
使用这两个改变后,你的更新后的代码可能如下所示:
int number;
char *result = malloc(5);
void setup() {
number = 12;
Serial.begin(9600);
sprintf(result, "%04d", number);
}
void loop() {
Serial.println(result);
}
考虑在输出值时进行格式化,否则您可以使用整数值执行任何算术和计算。
result = printf("%03d", number);
我们希望使用'sprintf'而不是'printf'。
'sprintf'需要放置它的输出字符串。可以预先分配它,确保它比最长的输出字符串加一更大(以容纳终止的空字符)。请勿在'setup'内部分配它,而是将其放在任何例程之外(因为您在一个例程中初始化它,并在另一个例程中使用它)。
char buf[6];
r = sprintf(buf, "%04d", number);
// now print the string inside of 'buf'
Serial.println(buf);
C#
。然而,基本思路仍然保持不变。result
需要是一个字符串而不是整数。 - Rion Williamsmalloc(5)
。 - David Ranieri