fsn文件生成異常?
fsn異常問題以及解決辦法如下:
#pragma once#include <Windows.h>
#include <iostream>
#include <vector>
#include <fstream>
#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::vector<Money_Info> ReadTk(std::string &filename,int ncount);
Money_Info InsList(vector<BOC_TagRecord_Data*>& vecRecord, int nStartPos);
vector<BOC_TagRecord_Data*> m_vecRecordData;
private:
vector<Money_Info> m_vecMoneyInfo;
}。
測試成功:
int main(){
int rtn = foo(10);
std::vector<Money_Info> Vec_MoneyInfo;
FsnParser ftd ;
std::string path="e:\\095720.FSN";
Vec_MoneyInfo = ftd.ReadTk(path,0);
return 0;
}。