2016-01-13 68 views
1

找遍在许多论坛,但是还没有找到答案,我的问题:“ X01” [0]为什么在字符串的结尾出现[0]

我试图理解我的3D打印机(马林固件)和我里面的软件发现这个C++代码:

#define LCD_STR_BEDTEMP  "\x00" 
#define LCD_STR_DEGREE  "\x01" 
#define LCD_STR_THERMOMETER "\x02" 
#define LCD_STR_UPLEVEL  "\x03" 
#define LCD_STR_REFRESH  "\x04" 
#define LCD_STR_FOLDER  "\x05" 
#define LCD_STR_FEEDRATE "\x06" 
#define LCD_STR_CLOCK  "\x07" 
#define LCD_STR_ARROW_RIGHT "\x7E" /* from the default character set */ 

lcd.createChar(LCD_STR_BEDTEMP[0], bedTemp); 
lcd.createChar(LCD_STR_DEGREE[0], degree); 
lcd.createChar(LCD_STR_THERMOMETER[0], thermometer); 
lcd.createChar(LCD_STR_UPLEVEL[0], uplevel); 
lcd.createChar(LCD_STR_REFRESH[0], refresh); 
lcd.createChar(LCD_STR_FOLDER[0], folder); 
lcd.createChar(LCD_STR_FEEDRATE[0], feedrate); 
lcd.createChar(LCD_STR_CLOCK[0], clock); 

lcd.createChar是,我有没有问题,但我不明白的部分是为什么所有的#define字符串的结束Arduino的命令与[0]

感谢您的任何帮助。

+0

'[0]'是一个数组索引方法,意思是取第一个字符。 – MrHug

+2

看起来像使用特殊字符的迂回路线。所有的字符串都包含1个字符。 '[0]'获得该字符串的第一个字符。为什么它以这样的方式完成 - 没有更多背景就无法分辨。 –

+0

抱歉,但我不明白最后一部分。 这个程序非常复杂,很多人编写不同的部分,所以在所有的程序都是现在的规范,以避免** IDE **编译期间的错误 无论如何,你回答我的问题,谢谢 P.S. 程序需要许多不必要的澄清以确保编译正确 –

回答

0

您的所有宏都会生成始终以\ 0结尾的字符串文字。请显示lcd.createChar函数的签名。也许这个问题会更加清楚。

+0

我很确定它只是为兼容HD44870U的LCD控制器编程充电RAM。由于chargen访问是面向字节的,因此只使用'char'是有意义的。 –

+0

你的签名是什么意思? –

+0

我的意思是什么数据类型的lcd.createChar作为参数?我想更好地了解您的问题。到目前为止我的理解是,你有不便通过 'lcd.createChar(LCD_STR_BEDTEMP [0],bedTemp);' 而不是 'lcd.createChar(LCD_STR_BEDTEMP,bedTemp);' – dmi

相关问题