我試圖在液晶顯示器上顯示一個整數。液晶顯示器的工作方式是將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'內進行轉換的事實表明沒有簽名。 – SergeyA
真正的ASCII碼是七位的,絕對包括數字 - 你如何選擇解釋最重要的/符號位應該沒有效果。所以演員不應該有問題。只是語法上的痛苦。 – Tommy