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

标签 c char hex decimal ascii

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

相关文章:

C语言无法输出数组?

c - 意外结果结构 C

c - stdint.h 库中是否包含整数类型 "extended integer types"?

php - 如何在 php 中将一个巨大的整数转换为十六进制?

java - 字节值与十六进制的比较

c - 为什么我在这里得到错误的答案?

c - 如何在 Objective-C 的结构中将 NSString 的值存储为 char 数组?

c++ - 为什么 getline() 跳过输入,即使在 cin.clear() 之后?

c - 如何修复 'Segmentation Fault (core dumped)'错误

python - 在 Python 中对整数进行十六进制化