【问题标题】:ISO 8583 c library unpack messageISO 8583 c 库解包消息
【发布时间】:2014-08-11 11:21:25
【问题描述】:

我想知道如何使用 oscarsanderson 编写的 DL ISO-8583 Library(C 语言)解压缩 ISO 8583 消息?
例如,如果我有这样的消息:Here's my code

#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

【问题讨论】:

  • 到目前为止你尝试过什么?它是如何工作的?它是如何没有工作的?有什么特别的东西让你卡住了吗?我还建议您阅读the help pagesthe Stack Overflow question checklist。您可能还想了解如何创建Minimal, Complete, and Verifiable example
  • 我的 msg 格式可能不正确。
  • @MikeSherrill'CatRecall' - 不,没关系
  • 您的 char msg[] 不是有效的 ISO8583 消息。我想你的意思是char msg[] = "\x02\x10\x03"...。并且不要使用strlen,这不是字符串。
  • 你是对的 Matt McNabb 我的信息不正确但我遇到的问题是如何在套接字中发送 \00 因为一旦我写了 "\x02\x00\x03" 并通过套接字发送我收到的是 \5c00 而不是 \00。知道吗?我正在使用来自摩洛哥的 m2m 交换机

标签: c iso8583


【解决方案1】:

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

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

untel 最后一口。

并使用:

(void)DL_ISO8583_MSG_Unpack(&isoHandler,binMsg,strlen(msg)/2,&isoMsg);

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-01-03
      • 2015-05-04
      • 2011-12-20
      • 2015-01-30
      • 2018-09-03
      • 2019-05-16
      • 1970-01-01
      相关资源
      最近更新 更多