1、FsnParser.h文件

#pragma once

#include #include #include #include #define READ_SIZE 100

/**

* @brief 单个图像结构

*/

typedef struct

{

unsigned int Data[32];/**< 图像冠字号点阵数据 */

}BOC_BOC_TImageSNoData;

/**

* @brief 图像冠字号码结构

*/

typedef struct

{

short Num;/**< 字符数 */

short Height, width;/**< 每个图像字符高度和宽度 */

short Reserve2;/**< 保留字2 */

BOC_BOC_TImageSNoData SNo[12];

}BOC_TImageSNo;

typedef struct

{

USHORT HeadStart[4];

USHORT HeadString[6];

UINT Counter;

USHORT HeadEnd[4];

}BOC_Header_Fromat;

/**

* @brief 文件记录结构

*/

typedef struct

{

USHORT Date;/**< 验钞启动日期 Date=((Year-1980)<<9)+(Month<<5)+Day*/ //

USHORT Time;/**< 验钞启动时间 Time=(Hour<<11)+(Minute<<5)+(Second>>1)*/

USHORT tfFlag;/**< 真、假、残和旧币标志 */ //

USHORT ErrorCode[3];/**< 错误码(3个) */

USHORT MoneyFlag[4];/**< 货币标志 */ //

USHORT Ver;/**< 版本号 */

USHORT Valuta;/**< 币值 *///

USHORT CharNUM;/**< 冠字号码字符数 */

USHORT SNo[12];/**< 冠字号码 */ //

USHORT MachineSNo[24];/**< 机具编号 */

USHORT Operateor_No;/**< 保留字1 */

}BOC_TagData_Fromat;

typedef struct { //为变长类型

UINT u32_ImgDataLen; //图片文件长度

UINT u32_Image_Width;//图像宽度

UINT u32_Image_Height;//图像高度

UCHAR u8_Filetype[8];//文件类型.jpg 或者 .bmp

UCHAR Reserve[60]; //空出60个字节

}TKTImageSNo_File;

//u32_ImgDataLen

//图片数据

typedef struct {

USHORT u16_Date;

USHORT u16_Time;

USHORT u16_tfFlag;

USHORT u16_ErrorCode[3];

USHORT u16_MoneyFlag[4];

USHORT u16_Ver;

USHORT u16_Valuta;

USHORT u16_CharNum;

USHORT u16_SNo[12];

USHORT u16_MachineSNo[24];

USHORT u16_Reservel[20]; //空出40个字节

//TKTImageSNo_File ImageSNo_File;

}TKFSN_Record_File;

//2015-10号文,保留字的组成

typedef struct

{

USHORT machineSNo_Length : 4;

USHORT machine_Length : 4;

USHORT machine_Type : 4;

USHORT money_Type : 4;

}FSN_Reserve, *PFSN_Reserve;

#pragma pack()

enum ImageType

{

FSN_IMG_Standard = 0xC0,

FSN_IMG_JPG,

};

typedef struct

{

BOC_TagData_Fromat btf;

USHORT uFileFlag;//文件索引

DWORD dwOffset;//文件图片索引

CHAR bSame;//是否合格

INT llLen;//图片文件长度

BYTE uFileType;//文件类型

int nImgWidth;

int nImgHeight;

}BOC_TagRecord_Data;

struct Money_Info

{

std::string Id;

std::string Value;

std::string Kinds;

std::string IsReal;

std::string time;

std::string CharNum;

std::string MachineSNo;

};

using namespace std;

class FsnParser

{

public:

std::vectorReadTk(std::string &filename,int ncount);

Money_Info InsList(vector& vecRecord, int nStartPos);

vectorm_vecRecordData;

private:

vectorm_vecMoneyInfo;

};

2、FsnParser.cpp文件

#define _CRT_SECURE_NO_WARNINGS

#include "FSN_Parser.h"

#include #include void* __cdecl memcpy(void* dst,const void* src,size_t count)

{

void*ret = dst;

#if defined(_M_MRX000)||defined(_M_ALPHA)||defined(_M_PPC)

{

extern void RtlMoveMemory(void *, const void *, size_t count);

RtlMoveMemory(dst, src, count);

}

#else

while (count--) {

*(char *)dst = *(char *)src;

dst = (char *)dst + 1;

src = (char *)src + 1;

}

#endif

return (ret);

}

//解析FSN文件

//BOC_TagData_Fromat *btf = (BOC_TagData_Fromat*)malloc(sizeof(BOC_TagData_Fromat*));

//int len = sizeof(BOC_TagData_Fromat*);

std::vectorFsnParser::ReadTk(std::string &filename,int ncount)

{

FILE *myf = fopen(filename.c_str(), "rb");

if (myf == nullptr)

{

cout << "Error opening file";

exit(1);

}

char buffer[3072] = { 0 };

int iread_offset = 0;

iread_offset += sizeof(BOC_Header_Fromat);

int read_size = READ_SIZE;//文件记录

int position = 0;

std::vectorVec_MoneyInfo;

fseek(myf, 0, 2);

int fileSize = ftell(myf); //求文件的长度

while (!feof(myf))

{

fseek(myf, iread_offset, SEEK_SET);

position = ftell(myf);

fread(buffer, read_size, 1, myf);

iread_offset += READ_SIZE;

TKFSN_Record_File *pdata = (TKFSN_Record_File*)buffer;

BOC_TagRecord_Data *bctd = new BOC_TagRecord_Data;//数据标记记录

memset(bctd, 0, sizeof(BOC_TagRecord_Data));

bctd->btf.Date = pdata->u16_Date;

bctd->btf.Time = pdata->u16_Time;

bctd->btf.tfFlag = pdata->u16_tfFlag;

memcpy(bctd->btf.ErrorCode, pdata->u16_ErrorCode, sizeof(bctd->btf.ErrorCode));

memcpy(bctd->btf.MoneyFlag, pdata->u16_MoneyFlag, sizeof(bctd->btf.MoneyFlag));

bctd->btf.CharNUM = pdata->u16_CharNum;

memcpy(bctd->btf.SNo, pdata->u16_SNo, sizeof(bctd->btf.SNo));

memcpy(bctd->btf.MachineSNo, pdata->u16_MachineSNo, sizeof(bctd->btf.MachineSNo));

iread_offset += sizeof(BOC_TImageSNo);

m_vecRecordData.push_back(bctd);

ncount++;

Money_Info m_info = InsList(m_vecRecordData, ncount-1);

Vec_MoneyInfo.push_back(m_info);

}

fclose(myf);

return Vec_MoneyInfo;

}

Money_Info FsnParser::InsList(vector& vecRecord, int nStartPos)

{

int j = 0;

unsigned char idLevel = 0;

int nEndPos = vecRecord.size();

Money_Info m_info;//保存Money信息的数据结构

for (int i = nStartPos; i < nEndPos; i++)

{

BOC_TagData_Fromat* pdata = &vecRecord[i]->btf;

char tmpbuf[26];

//SNo

memset(tmpbuf, 0, 26);

for (j = 0; j < 12; j++)

{

tmpbuf[j] = pdata->SNo[j] & 0xFF;

std::cout << tmpbuf[j] << " ";

}

m_info.Id = tmpbuf;//

//CharNum

memset(tmpbuf, 0, 26);

sprintf_s(tmpbuf, "%d", pdata->CharNUM);

m_info.CharNum = tmpbuf;//

//面值

memset(tmpbuf, 0, 26);

sprintf_s(tmpbuf, "%d", pdata->Valuta);

m_info.Value = tmpbuf; //

//MomeyId 币种

memset(tmpbuf, 0, 26);

for (j = 0; j < 4; j++)

{

tmpbuf[j] = pdata->MoneyFlag[j] & 0xFF;

}

m_info.Kinds = tmpbuf; //

//真伪

memset(tmpbuf, 0, 26);

sprintf_s(tmpbuf, "%d", pdata->tfFlag);

m_info.IsReal = tmpbuf;

//错误码

memset(tmpbuf, 0, 26);

idLevel = (pdata->ErrorCode[1] >> 8);

//机具编号

memset(tmpbuf, 0, 26);

for (j = 0; j < 24; j++)

{

tmpbuf[j] = pdata->MachineSNo[j] & 0xFF;

std::cout << tmpbuf[j];

}

m_info.MachineSNo = tmpbuf;//

//时间戳

memset(tmpbuf, 0, 26);

sprintf_s(tmpbuf, "%04d-%02d-%02d %02d:%02d:%02d", (pdata->Date >> 9) + 1980, (pdata->Date >> 5) & 0x0F, pdata->Date & 0x1F,

(pdata->Time >> 11), (pdata->Time >> 5) & 0x3F, (pdata->Time << 1) & 0x3F);

m_info.time = tmpbuf;//

return m_info;

}

}

3、测试代码

int main()

{

int rtn = foo(10);

std::vectorVec_MoneyInfo;

FsnParser ftd ;

std::string path="e:\\095720.FSN";

Vec_MoneyInfo = ftd.ReadTk(path,0);

return 0;

}

java读取.fsn文件内容_FSN文件的解析(点钞机读取钱币文件)相关推荐

  1. python中读取文件内容-深入学习python解析并读取PDF文件内容的方法

    这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应 ...

  2. 2019-8-20 [Linux] 6.Shell的基本操作 查看 改变 列出 阅读开头/结尾 循环查看 阅读工具less 查找文件内容 文本分析工具AWK 文本编辑工具SED文件find 帮助man

    文章目录 6.linuxShell的基本操作 6.1 查看目录和文件 6.1.1 显示当前目录:pwd 6.1.2 改变目录:cd 6.1.3 列出目录内容:ls 1) 查看列表信息 以及详细信息 2 ...

  3. python怎么读取txt文件内容然后保存到excel-Python实现读取txt文件并转换为excel的方法示例...

    本文实例讲述了Python实现读取txt文件并转换为excel的方法.分享给大家供大家参考,具体如下: 这里的txt文件内容格式为: 892天平天国定都在?A开封B南京C北京(B) Python代码如 ...

  4. Python读取两个txt文件内容,重新写到新的txt文件

    本博客已经转移到:www.itwps.com 此博客后续不会再更新,详情请关注一下www.itwps.com,谢谢. def test():new_text_path="你需要写入文件的路径 ...

  5. python读取文件内容并操作_Python实现的读取文件内容并写入其他文件操作示例

    本文实例讲述了Python实现的读取文件内容并写入其他文件操作.分享给大家供大家参考,具体如下: 文件目录结构,如图: read_file.py是工作文件,file_test.py是读取文件源,wri ...

  6. python读取pdf文件_深入学习python解析并读取PDF文件内容的方法

    这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应 ...

  7. linux 读取zip文件内容,Linux 下zcat对压缩打包日志文件(*.tar.gz)读取及过滤查询所需日志...

    我们在对我们的服务器所需要的日志进行备份的时候,我们多会对日志进行一个割接的操作,例如一天割接一次,割接出来的日志也会再次压缩后进行保存,但是当我们所保留的日志量非常大的时候,此时查询日志的难度也就相 ...

  8. php csv文件内容加粗,PHP强化之10 - CSV文件处理

    一.生成CSV文件 1.主要函数: fputcsv-将行格式化为 CSV 并写入文件指针 int fputcsv ( resource $handle , array $fields [, strin ...

  9. rpa文件怎么提取内容_怎么编辑pdf文件内容?有什么软件可以编辑pdf文件吗?

    怎么编辑pdf文件内容?我是2020年大学新生,选择学习的专业是财务管理.为了更快.更深入地了解更多专业知识,我上网查找.下载了很多相关资料.不过,从网上保存下来的资料文件大多是pdf格式的,想要编辑 ...

  10. win10系统计算机搜索文件,win10搜索文件内容的方法是什么_win10精确搜索文件内容的方法...

    最近有朋友问小编win10搜索文件内容的方法是什么,对于这个问题,相信很多朋友都是一头雾水,不知道应该如何搜索.有时候我们想在电脑上查找一个文件,但是忘记了这个文件的名字,这时候就可以搜索文件内容中的 ...

最新文章

  1. 背景图自适应屏幕居中显示,且不变形
  2. 如何学习大数据!!我要做大数据!
  3. html的css样式中表示后代选择器,html添加css——样式选择器
  4. c detail of macro
  5. Linux系统之高级用户组和权限管理
  6. HTML内嵌式CSS背景图填充满无截断重复
  7. html标签anchor,浏览器端-W3School-HTML:HTML DOM Anchor 对象
  8. 求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,例如:2+22+222+2222+22222
  9. 宝塔面板网站一打开cpu百分百_BT宝塔面板打开这个功能网站快到起飞,降低宝塔面板内存和CPU使用率,降低运行负载...
  10. mysql msdtc 不支持_IIS5.1安装后,不支持IIS的问题。(转)
  11. java io流区别_Java中IO流的分类和BIO,NIO,AIO的区别
  12. au插件vst_Propellerhead改名Reason Studios,并推出插件版Reason 11
  13. 鲍岳桥:52 岁还在熬夜写代码! | 人物志
  14. 【MyBatis笔记】日志
  15. CVE-2020-1938/CNVD-2020-10487:Apache Tomcat 远程执行代码漏洞
  16. 淘宝上卖云控系统靠谱吗?
  17. Android使用MediaStore.ACTION_IMAGE_CAPTURE拍照
  18. Vue一级路由与二级路由/路由重定向
  19. 2019大疆秋招面经(后台开发录用)
  20. 微信支付 postman_微信收款商业版有什么功能?微信智慧经营2.0原来可以这么玩!...

热门文章

  1. 转florian大神blog之 - 从实现装饰者模式中思考C++指针和引用的选择
  2. WSL中的SSH配置方法
  3. Fakelocation模拟KEEP运动记录
  4. Java开发最佳实践手册全网独一份,狂神说docker进阶笔记
  5. beSTORM企业级黑盒模糊测试工具
  6. Cobol语言基础培训教程
  7. 蓓丽La Prairie 不老神话鱼子精华水晶精华液
  8. 帮我写一个单连杆柔性机械臂的综述
  9. 枫桥学院开元名庭酒店DMR系统解决方案
  10. python和c语言哪个实用-c语言和python语言哪个更值得学?