1

我想知道如何使用oscarsanderson 编写的DL ISO-8583 库(C 语言)解压 ISO 8583 消息?
例如,如果我有这样的消息:这是我的代码

#include "dl_iso8583.h"
#include "dl_iso8583_defs_1993.h"
#include "dl_output.h" // for 'DL_OUTPUT_Hex'

#define ISOHEADER 4
#define ISOHEADERSTR "%04d"

int main ( void )
{
    DL_ISO8583_HANDLER isoHandler;
    DL_ISO8583_MSG     isoMsg;
    DL_UINT8           packBuf[1000];
    DL_UINT16          packedSize;
    char msg[]="0210323A40010A4180103800000000000000000420050805011392120805042004225132072000001000000115604000800411 163011511463331563GBAAASDD ERRR 1300101B54391001000017654350000000000090300000268410000000300000000000000898100009431000000000000000000 000000000000000036000299";

    unsigned short iso_req_size,iso_resp_size;
    char iso_header[ISOHEADER+1];
     char iso_req_buf[10000];
     char iso_resp_buf[10000];

    /* get ISO-8583 1993 handler */
    DL_ISO8583_DEFS_1993_GetHandler(&isoHandler);
    DL_ISO8583_MSG_Init(NULL,0,&isoMsg);

    // Unpack message
    DL_ISO8583_MSG_Init(NULL,0,&isoMsg);

    (void)DL_ISO8583_MSG_Unpack(&isoHandler,msg,strlen(msg),&isoMsg);
    DL_ISO8583_MSG_Dump(stdout,NULL,&isoHandler,&isoMsg);
    DL_ISO8583_MSG_Free(&isoMsg);

    return 0;

}

我想在解包消息时检索这些字段:

    [000]:210
    [003]: 380000
    [004]: 000000000000
    【007】:0420050805
    【011】:011392
    【012】:120805
    [013]:0420
    【015】:0422
    【018】:5132
    [039]:00
    [049]:000
4

2 回答 2

2

您必须将您的味精从十六进制格式转换为二进制。像这样

binMsg[0]=0x02
binMsg[1]=0x10
binMsg[2]=0x32
binMsg[3]=0x3A
binMsg[4]=0x40

最后一口。

并使用:

(void)DL_ISO8583_MSG_Unpack(&isoHandler,binMsg,strlen(msg)/2,&isoMsg);
于 2016-02-14T15:19:22.773 回答
1

据我所知,oscarsanderson 编写的 DL iso 8583 库不适用于十六进制位图。所以首先您需要将十六进制位图转换为二进制,然后您需要知道 iso 结构字段的属性(即元素类型(数字、二进制、字母数字、ascii等),长度,长度类型(固定长度或可变长度))。知道这一点后,您可以检索字段

于 2014-12-17T19:13:55.687 回答