gpt4 book ai didi

c - 如何通过USB发送数据并通过驱动读取数据?

转载 作者:行者123 更新时间:2023-11-30 20:34:49 25 4
gpt4 key购买 nike

通过我的 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 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

最佳答案

此示例展示了一种将四个十进制字节转换为数字,然后以十六进制输出的方法。

#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 ("%s\n", message);
}
}
return 0;
}

程序输出:

02694

顺便说一句,您的 8 位 x 变量不够大,无法容纳您分配给它的值。

关于c - 如何通过USB发送数据并通过驱动读取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41279910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com