【发布时间】:2017-05-07 21:19:09
【问题描述】:
通过我的 USB 连接,我收到了一些命令,我想让它们对我的驱动程序可读。
第一个字符是字母 S,然后是几个数字 (4)。 我想将这些数字从 asci 转换为十进制,然后在其他函数中将它们写为 HEX。最大大小可以是 20 位。
由于我是 C 新手,所以我在转换时遇到了问题。
如果有人能给我一些建议,我会很高兴。
u8 x;
u8 xx;
u8 xxx;
u8 xxxx;
u32 y;
void ProcessCommandUSB(u8 b_Data[USB_COMMAND_LENGTH],u8 b_DataLength)
{
switch (b_Data[0]) // process first byte
{
case '\r': // ignore
break;
case '\n': // ignore
break;
////// SPEED ///////
case 'S':
x= b_Data[1];
xx= b_Data[2];
xxx= b_Data[3];
xxxx= b_Data[4];
// I NEED TO CHECK IF VARIABLES ARE NUUMBERS, OTHERWISE ERROR.
if (x,xx,xxx,xxxx =='0')|(x,xx,xxx,xxxx =='1')|(x,xx,xxx,xxxx =='2')\
|(x,xx,xxx,xxxx =='3')|(x,xx,xxx,xxxx =='4')|(x,xx,xxx,xxxx =='5')\
|(x,xx,xxx,xxxx =='6')|(x,xx,xxx,xxxx =='7')|(x,xx,xxx,xxxx =='8')|(x,xx,xxx,xxxx =='9');
{
//to make asci char, decimal
x = (x-48)* 1000;
xx = (xx-48)* 100;
xxx =(xxx-48)* 10;
xxxx -= 48;
y=x+xx+xxx+xxxx;
}
//THIS PART OF CODE DOWN WORKS, AND I WANT TO WRITE THE BYTES RECEIVED
//WITH S COMMAND (Y), IN FUNCTION RUN INSTEAD OF 0x034444.
else
{
sprintf(vrni, "D Error\r");
}
USB_Send_String (vrni);
break;
case 'D': // version
if(b_Data[1] == '<')
{
RUN(REV, 0x034444);
sprintf(vrni, "nazaj\r");
....... //REST OF THE CODE WORKS
【问题讨论】:
-
您的意思是
xx = (xx-48)* 100;和xxx =(xxx-48)* 10;?在这两行中我看不到你的(x-48)的意义。 -
是的!抱歉弄错了。
-
您的意思是对编码错误感到抱歉,还是对发布不是您的代码的代码表示抱歉?
-
“我需要以十六进制格式合并 X 变量” - 只需添加它们
x + xx + xxx + xxxx。我假设输入是十进制的,因为您将数字乘以10等。没有“十六进制格式”之类的东西,数字以二进制形式存储。如果您想以人类可读的十六进制格式输出数字,您可以使用带有格式说明符的printf系列,例如%05X。 -
顺便说一句,除非您打算执行到下一个
case,否则您需要在case S:代码块的末尾添加一个break;。