Как объединить два полученных ввода и прочитать их как одно целое число в WINAVR? - PullRequest
1 голос
/ 01 ноября 2010

Я хочу, чтобы пользователи вводили 2 цифры с помощью команды c = ReceiveByte ().Например, я хочу, чтобы пользователь сделал следующее:

Enter 5
Enter 3
Output number 53 in ascii value on screen ( using hyperterminal )
Store number in a single array
Use that number for other loops etc.

Мой черновой код:

.
.
int c1[3];
c1[0]=ReceiveByte();
c1[1]=ReceiveByte();
.
.
for(i=0;i<3;i++)
 TransmitByte(c1[i]);
.
.

Это правильно?или я неправильно храню 2 цифры?

Большое спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 01 ноября 2010

Поскольку вы, похоже, получаете байты от функции Receivebyte (), вы должны хранить их как байты (беззнаковые символы), а не как целые числа, поскольку использование целого числа для хранения одного байта тратит 3 байта памяти.

В противном случае ваша реализация эха должна работать - даже если вы захотите добавить защиту от пользователя, отправляющего символы, которые не являются числовыми.

Вам нужно будет преобразовать символы ASCII '5' и«3» (коды ASCII 53 и 51) для их числового значения (вычтите 48 из каждого, поскольку числа варьируются от 48 до 57 в схеме кодирования ASCII)

1 голос
/ 01 ноября 2010

Для вывода вам не нужно изменять c1 [0] и c1 [1], так как они уже содержат введенные символы. Поскольку ваш код стоит, вам просто нужно убедиться, что c1 [2] содержит действительный символ, например,

c1[2] = '\n';

Кстати, если вам нужно получить введенный номер как int:

int num = (c1[0] - '0') * 10 + (c1[1] - '0');
...