串口发送16进制数据

来源:互联网 发布:java.exe自动关闭 编辑:程序博客网 时间:2024/06/02 05:31

用串口调试助手时发现此工具可以发送 16进制的数据串

分析后,粗略实现如下: 

 

// eg: unsigned char src[] = "02042A2A50575203"  // 16进制的串 // 每1个字节可以存放2个16进制位// eg:16进制的 0x01 在内存中为(little-endian)   0000,0001   =  (0x0 << 4 | 0x1)//             0x2a                           0010,1010   =  (0x2 << 4 | 0xa)// #define HEX_STR_LEN         17int hextoi(unsigned char * asic){    if(*asic >= 48 && *asic <= 57)    {        *asic -= 48;    }    else if(*asic >= 65 && *asic <= 70)    {        *asic = *asic - 65 + 10;    }    else if(*asic >= 97 && *asic <= 102)    {        *asic = *asic - 97 + 10;    }    else    {        return -1;    }    return 0;}int hex2numeric(void * src, unsigned int len, unsigned char * serialCmd){    if(src == NULL || serialCmd == NULL)    {        return -1;    }        unsigned char *sCmd = serialCmd;    unsigned char *pStart = (unsigned char *)src;        int i = 0;    int j = 0;        while(j < len/2)    {        if(!hextoi(&pStart[i]) && !hextoi(&pStart[i+1]))        {            sCmd[j] = ((pStart[i] << 4) | pStart[i+1]);        }        else        {            return -1;        }        j += 1;        i += 2;      }    return 0;}/***********************************************************
* test
* send data like this***********************************************************/int main(int argc, char *argv[]){int fd = -1;unsigned char src[HEX_STR_LEN] = "02042A2A50575203";unsigned char serialCmd[HEX_STR_LEN/2];memset(serialCmd, 0x00, sizeof(serialCmd));if(hex2numeric(src, HEX_STR_LEN, serialCmd) < 0){// ...return;}
        // open serial port
if((fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY)) < 0){// ...return ;}        SetSerialBaud(fd, B9600);        SetSerialParity(fd, CS8, STOPB1, NULL);        SetSerialFlowControl(fd, NOCTRL, 0);// ...write(fd, serialCmd, sizeof(serialCmd));// ...return 0;}


 

原创粉丝点击