#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\n", Frameinfo.Data[0]);
printf("%x\n", Frameinfo.Data[1]);
printf("%x\n", Frameinfo.Data[2]);
printf("%x\n", Frameinfo.Data[3]);
printf("%x\n", Frameinfo.Data[4]);
printf("%x\n", Frameinfo.Data[5]);
printf("%x\n", Frameinfo.Data[6]);
printf("%x\n", Frameinfo.Data[7]);
cout << "------------\n";
system("pause");
}

.ini配置CAN信息的更多相关文章

  1. golang 读取 ini配置信息

      package main //BY: 29295842@qq.com//这个有一定问题   如果配置信息里有中文就不行//[Server] ;MYSQL配置//Server=localhost   ...

  2. php.ini配置中文详解

    ;;;;;;;;;;; ; 警告 ; ;;;;;;;;;;; ; 此配置文件是对于新安装的PHP的默认设置. ; 默认情况下,PHP使用此配置文件安装 ; 此配置针对开发目的,并且*不是*针对生产环境 ...

  3. php扩展开发-INI配置

    php.ini文件是用来保存各项扩展配置的文件,每个扩展都或多或少需要有一个定制化的配置,ini文件是一个很好的保存配置的方式,我们来看下怎么在自己的扩展里,使用到ini的配置功能 //创建ini的配 ...

  4. python-通过configparser模块读取后缀为 .ini 的配置文件信息

    前言 一般为了方便会将路径,连接信息等写到配置文件(通常会将这些信息写到yaml,ini....配置文件)中,configparser模块读取后缀为 .ini 的配置文件信息 配置文件格式 #存在 c ...

  5. 【转载】PHP.INI配置:Session配置详细说明教程

    网上有很多PHP.INI文件配置的中文说明,但是对于PHP初学者来说在进行PHP运行环境搭建配置时还是容易一头雾水,今天换一种角度来分享如何进行php.ini配置,以求达到解决实际问题的效果,开篇以P ...

  6. 深入理解php中的ini配置(1)

    这篇文章不会详细叙述某个ini配置项的用途,这些在手册上已经讲解的面面俱到.我只是想从某个特定的角度去挖掘php的实现机制,会涉及到一些php内核方面的知识:-) 使用php的同学都知道php.ini ...

  7. 跟开涛老师学shiro -- INI配置

    之前章节我们已经接触过一些INI配置规则了,如果大家使用过如spring之类的IoC/DI容器的话,Shiro提供的INI配置也是非常类似的,即可以理解为是一个IoC/DI容器,但是区别在于它从一个根 ...

  8. EDIT Ini写Ini配置

    EDIT Ini写Ini配置  uses IniFiles; {$R *.dfm}   function IniFileName:string; begin    Result:=ExtractFil ...

  9. 混合模式程序集是针对“v1.1.4322”版的执行时生成的,在没有配置其它信息的情况下,无法在 4.0 执行时中载入该程序集。

    看到一个kinect大牛编写的一个水果忍者的体感游戏版本号,让我为自己一直以来仅仅用现有的网页游戏来模拟kinect体感游戏控制感到羞愧,没办法.我还是菜鸟.学习一段后自己模仿星际大战这个游戏.自己写 ...

随机推荐

  1. 【jQuery】输入框自带清除按钮

    最近一个项目,需要在输入框时右边出现“X”标志,点击X即可清空,主要使用了click和blur事件,难点在于点击‘X’时,input框获得焦点时出现“X”标志,而点击"x"标志时i ...

  2. RESTful API架构和oauth2.0认证机制(概念版)

    1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Roy Fielding的 ...

  3. 38.VUE学习之-全局组件和局部组件

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  4. 使用 Ajax

    Ajax( Asynchronous JavaScript and XML) 在 Ajax 中 Asynchronous 是指异步, 代表 客户端(Client 通常是指浏览器) 可以向服务器(Ser ...

  5. python sys模块和序列化模块

    sys模块是与python解释器交互的一个接口: sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit( ...

  6. kafka生产者与消费者的生产消息与消费消息所遇到的问题

    当我们用API写kafka的时候 生产者生产消息,但是消费者接收不到消息?集群上启动消费者显示生产的消息.我们需要修改一下配置 (1)我们打开在虚拟机中修改kafka集群的配置文件 [root@spa ...

  7. Xcode 代码提示功能失效

    前言: 以前好像很少碰到Xcode中代码提示出问题的情况,最近经常遇到这个问题.没有了Xcode的智能提示,发现我已完全不会写代码了. 本来想吐槽下万恶的baidu,鉴于百度前端时间的各种(贴吧.竞价 ...

  8. 架构师速成5.1-小学gtd进阶 分类: 架构师速成 2015-06-26 21:17 313人阅读 评论(0) 收藏

    人生没有理想,那和咸鱼有什么区别. 有了理想如何去实现,这就是gtd需要解决的问题.简单说一下gtd怎么做? 确定你的目标,如果不能确定长期目标,至少需要一个2年到3年的目标. 目标必须是可以衡量的, ...

  9. [网站公告]又拍云API故障造成图片无法上传

    大家好,今天早上8:30左右发现又拍云API出现故障,造成图片无法上传,调用图片上传API时出现错误:“The operation has timed out”. 该故障给大家带来了麻烦,望大家谅解! ...

  10. java初学3

    1.包装类 Java提倡的万物皆对象,但是数据类型的划分出现了基本数据类型和引用数据类型,那么我们怎么能把基本数据类型称为对象呢? Java为每个原始类型提供了封装类,Integer是java为int ...