问题描述
我需要打印4位长的数字,这些数字是从0到16的二进制数字(0000、0001、0010等)。
问题:
考虑此代码:
char array[] = {'0000','0001','0010','0011'};
int i;
void setup() {
Serial.begin(9600);
}
void loop() {
while (i < 4){
Serial.println(array[i]);
i++;
}
}
串行监视器输出:
0
1
0
1
或者我的预期输出是:
0000
0001
0010
0011
似乎只读取数组中每个元素的第一个“字符”。
问题:如何在期望的输出中打印每个元素的完整性?
经过一番研究,我发现了这个:
然后指的是使用PROGMEM,但是我不确定这是否是我需要的,或者是否有解决我问题的更简单的方法。
谢谢
解决方法
如评论中所述,请勿使用多字符常量(您使用的单引号)。他们可能会杀死幼犬。单引号用于字符常量,例如'a'
。
您可以使用字符串(带双引号)或真实的二进制数;没有欺骗性,后者将打印而没有前导零。
此代码示例同时完成了这两项工作,因此请选择所需的内容:
const char* array1[] = {"0000","0001","0010","0011"}; // strings
uint8_t array2[] = {0b000,0b0001,0b0010,0b0011}; // binary numbers
int arraySize = sizeof(array1) / sizeof(array1[0]);
void setup() {
Serial.begin(9600);
while (!Serial);
Serial.println("Print the strings:");
int i = 0;
while (i < arraySize){
Serial.println(array1[i]);
i++;
}
Serial.println("\nPrint the binary numbers (note: no leading zeroes):");
i = 0;
while (i < arraySize){
Serial.println(array2[i],BIN);
i++;
}
}
void loop() {
}