通过我的USB连接,我收到了一些命令,我想让它们适合我的驱动程序。
第一个字符是一个字母s,之后有几个数字(4)进来。我想将此数字从ASCI转换为十进制,然后将它们写为其他功能中的十六进制。最大尺寸可以是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 Errorr");
}
USB_Send_String (vrni);
break;
case 'D': // version
if(b_Data[1] == '<')
{
RUN(REV, 0x034444);
sprintf(vrni, "nazajr");
....... //REST OF THE CODE WORKS
此示例显示了一种将四个小数字节转换为数字然后输出为十六进制的方法。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void){
char message[24];
char b_Data[] = "S9876";
unsigned num;
if(b_Data[0] == 'S') {
if(isdigit(b_Data[1]) && isdigit(b_Data[2]) &&
isdigit(b_Data[3]) && isdigit(b_Data[4])) {
num = (b_Data[1] - '0') * 1000 +
(b_Data[2] - '0') * 100 +
(b_Data[3] - '0') * 10 +
b_Data[4] - '0'; // use '0' not magic number
sprintf(message, "%05X", num);
printf ("%sn", message);
}
}
return 0;
}
程序输出:
02694
顺便说一句,您的x
变量为8位不足以保持您分配给它的值。