【发布时间】:2016-01-13 15:44:52
【问题描述】:
我正在尝试在 LCD 显示器上显示整数。 Lcd 的工作方式是向它发送一个 8 位 ASCII 字符并显示字符。
我目前的代码是:
unsigned char text[17] = "ABCDEFGHIJKLMNOP";
int32_t n = 123456;
lcd.printInteger(text, n);
//-----------------------------------------
void LCD::printInteger(unsigned char headLine[17], int32_t number)
{
//......
int8_t str[17];
itoa(number,(char*)str,10);
for(int i = 0; i < 16; i++)
{
if(str[i] == 0x0)
break;
this->sendCharacter(str[i]);
_delay_ms(2);
}
}
void LCD::sendCharacter(uint8_t character)
{
//....
*this->cOutputPort = character;
//...
}
所以如果我尝试在 LCD 上显示123456,它实际上显示的是-7616,这显然不是正确的整数。
我知道可能有问题,因为我将字符转换为有符号的int8_t,然后将它们输出为无符号的uint8_t。但我必须以无符号格式输出它们。我不知道如何将int32_t 输入整数转换为ASCII uint8_t-String。
【问题讨论】:
-
还有一个问题是您的 char* 被签名或未签名。您必须在
itoa内部进行转换这一事实表明未签名。 -
真正的 ASCII 是 7 位的,绝对包括数字——你选择如何解释最高有效位/符号位应该没有影响。所以演员阵容应该没有问题。只是语法上的痛苦。