• .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");
    }

  • 相关阅读:
    Java——HashSet和TreeSet的区别
    TreeSet和TreeMap不能存放重复元素?能不能存放null?其实不是这样的——灵活的二叉树
    Java 数组元素逆序Reverse的三种方式
    Java开发中使用sort排序
    Android Studio导入第三方库的三种方法
    Android下拉涮新第三方通用控件
    手把手教你MyEclipseUML建模(下)
    手把手教你MyEclipseUML建模(上)
    java enum(枚举)使用详解 + 总结
    翻译学python---《Learn Python the hard Way》---第一章 绪论
  • 原文地址:https://www.cnblogs.com/fengliu-/p/7367842.html
Copyright © 2020-2023  润新知