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

  • 相关阅读:
    ATM+购物车项目
    python基础语法13 内置模块 subprocess, 正则表达式re模块, logging日志记录模块, 防止导入模块时自动执行测试功能, 包的理论
    kvm ip查看
    tar 排除某个目录
    MySQL5.7 添加用户、删除用户与授权
    tomcat 自带jdk
    django examples 学习笔记(1)创建一个独立的python环境
    cdh 安装组件 异常总结
    pycharm ubuntu安装
    (cdh)hive 基础知识 名词详解及架构
  • 原文地址:https://www.cnblogs.com/fengliu-/p/7367842.html
Copyright © 2011-2022 走看看