代码之家  ›  专栏  ›  技术社区  ›  NLed

如何在WinAVR中将两个接收到的输入组合成一个整数?

  •  1
  • NLed  · 技术社区  · 14 年前

    我希望用户使用c=receivebyte()命令输入2位数字。例如,我希望用户执行以下操作:

    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 回复  |  直到 14 年前
        1
  •  1
  •   Paul R    14 年前

    对于输出,您不需要修改c1[0]和c1[1],因为它们已经包含输入的字符。在代码中,您只需确保c1[2]包含有效字符,例如

    c1[2] = '\n';
    

    顺便说一句,如果您需要将输入的数字作为int:

    int num = (c1[0] - '0') * 10 + (c1[1] - '0');
    
        2
  •  1
  •   sum1stolemyname    14 年前

    因为您似乎从receiveByte()函数接收字节,所以应该将它们存储为字节(无符号字符),而不是整数,因为使用整数存储单个字节会浪费3个字节的内存。

    否则,echo实现应该可以工作——即使您可能希望添加对发送非数字字符的用户的保护。

    您必须将ASCII字符“5”和“3”(ASCII代码53和51)转换为它们的数值(在ASCII编码方案中,从每个字符中减去48,因为数字的范围是48到57)。