zoukankan      html  css  js  c++  java
  • .ini配置CAN信息

    #include <iostream>
    #include <windows.h>//这个头文件一定要添加,否则GetPrivateProfileString(...)函数无法使用
    #include <stdio.h>

    using namespace std;

    typedef struct _CAN_OBJ {
    UINT ID; //报文帧ID。
    UINT TimeStamp; //接收到信息帧时的时间标识, 从CAN控制器初始化开始计时, 单位微秒。
    BYTE TimeFlag;//是否使用时间标识, 为1时TimeStamp有效, TimeFlag和TimeStamp只在此帧为接收帧时有意义。
    BYTE SendType;//发送帧类型。 =0时为正常发送, =1时为单次发送( 不自动重发) , =2时为自发自收( 用于测试CAN卡是否损坏)
    = 3时为单次自发自收( 只发送一次, 用于自测试).只在此帧为发送帧时有意义。
    BYTE RemoteFlag;//是否是远程帧。 =0时为数据帧, =1时为远程帧。
    BYTE ExternFlag;//是否是扩展帧。 =0时为标准帧( 11位帧ID) , =1时为扩展帧( 29位帧ID)。
    BYTE DataLen;//数据长度DLC(<=8), 即Data的长度。
    BYTE Data[8];//CAN报文的数据。 空间受DataLen的约束。
    BYTE Reserved[3];//系统保留。
    }CAN_OBJ, *P_CAN_OBJ;//CAN_OBJ结构体表示帧的数据结构。


    int chartoint(unsigned char chr, unsigned char *cint)
    {
    unsigned char cTmp;
    cTmp = chr - 48;
    if (cTmp >= 0 && cTmp <= 9)
    {
    *cint = cTmp;
    return 0;
    }
    cTmp = chr - 65;
    if (cTmp >= 0 && cTmp <= 5)
    {
    *cint = (cTmp + 10);
    return 0;
    }
    cTmp = chr - 97;
    if (cTmp >= 0 && cTmp <= 5)
    {
    *cint = (cTmp + 10);
    return 0;
    }
    return 1;
    }


    int strtodata(unsigned char *str, unsigned char *data, int len, int flag)
    {
    unsigned char cTmp = 0;
    int i = 0;
    for (int j = 0;j<len;j++)
    {
    if (chartoint(str[i++], &cTmp))
    return 1;
    data[j] = cTmp;
    if (chartoint(str[i++], &cTmp))
    return 1;
    data[j] = (data[j] << 4) + cTmp;
    if (flag == 1)
    i++;
    }
    return 0;
    }

    //-----------------------------------------------------
    //参数:
    //chr:要转换的字符
    //cint:储存转换过来的数据
    //函数功能:字符转换为数据
    //-----------------------------------------------------

    void main() {

    char Path[100] = "C:\Users\liufeng16\Desktop\config.ini";
    CAN_OBJ Frameinfo;
    unsigned char Data[8];
    char szData[25];
    Frameinfo.ID=GetPrivateProfileInt("gear", "ID", 100, Path);
    GetPrivateProfileString("gear", "Data", "ooo", szData, sizeof(szData), Path);
    Frameinfo.DataLen = (strlen(szData) + 1) / 3;;
    strtodata((unsigned char*)szData, Data, Frameinfo.DataLen, 1);
    memcpy(&Frameinfo.Data, Data, Frameinfo.DataLen);
    cout <<int( Frameinfo.DataLen )<< endl;
    cout << Frameinfo.ID << endl;
    printf("%x ", Frameinfo.Data[0]);
    printf("%x ", Frameinfo.Data[1]);
    printf("%x ", Frameinfo.Data[2]);
    printf("%x ", Frameinfo.Data[3]);
    printf("%x ", Frameinfo.Data[4]);
    printf("%x ", Frameinfo.Data[5]);
    printf("%x ", Frameinfo.Data[6]);
    printf("%x ", Frameinfo.Data[7]);
    cout << "------------ ";
    system("pause");
    }

  • 相关阅读:
    饿了么P7级前端工程师进入大厂的面试经验
    前端程序员面试的坑,简历写上这一条信息会被虐死!
    这次来分享前端的九条bug吧
    移动端开发必会出现的问题和解决方案
    创建一个dynamics 365 CRM online plugin (八)
    创建一个dynamics 365 CRM online plugin (七)
    创建一个dynamics 365 CRM online plugin (六)
    创建一个dynamics 365 CRM online plugin (五)
    使用User Primary Email作为GUID的问题
    怎样Debug Dynamics 365 CRM Plugin
  • 原文地址:https://www.cnblogs.com/fengliu-/p/7367842.html
Copyright © 2011-2022 走看看