8583是这样的,我举一个简单的例子。以64个域的报文来举例,域是什么我也说不清楚,你可以把它想象为医院放药的抽屉,一个抽屉预先定义好要放什么东西,比如止咳糖浆,或者感冒冲剂,一般情况下定义放止咳糖浆的抽屉最好永远放止咳糖浆,不要放别的东西,当然你也可以放板蓝根,但这样的话容易出错,也不太规范。
数量是这么规定的,有三种情况:
首先是定量,也就是说定义好这个抽屉放30瓶止咳糖浆,就放30瓶一瓶也不能多,一瓶也不能少。
其次是LLVAR,也就是说用1位字节定义数量,比如0x12表示里头放12瓶,当然你也可以理解为16+2=18瓶。但要是0x12表示12,那0x13就等于13,不要0x12=12 ,0x13=19
最后是LLLVAR,是2位字节表示数量,比如 0x01,0x04 = 104
域也就是这样的,一共有64个域,每个域预先定义了内容和长度
有一个叫做BITMAP的,也就是位图,定义了一个数据包里包含
了几个域。举个例子
20 00 38 00 00 00 00 34
你把它解开,排列一下
20 = 0010 0000
00 = 0000 0000
38 = 0011 1000
依次类推,得到一串数字
0010 0000 0000 0000 0011 1000 0000 0000 0000 0000 0000 0000 0000 0000 0011 0100
然后从左到右数一下里头含有1的是那几位,上面的例子我们得到
3 19 20 21 59 60 62 ,这几位含有1。也就是说接下来的报文包含有这几个域。
好了说了那么多,我们来做一个简单的例子比如消费交易,需要上送交易类型,卡号等等,定义如下
卡号 第2域 LLVAR BCD 5309987876545342
交易类型 第3域 长度6 BCD 900000
金额 第4域 长度12 BCD 100分
时间 第7域 长度8 BCD 20030802
2磁道信息 第35域 LLVAR ASCII 123456
3磁道信息 第36域 LLLVAR BCD 123456001
商户号 第41域 LLVAR ASCII 98765432
好了我们现在开始打包,首先按照长度和类型把上面的数据处理一下
卡号 165309987876545342
交易类型 900000
金额 000000000100
时间 20030802
2磁道 06313233343536
3磁道 0009123456001
商户号 083938373635343332
接下来我们按照域信息生成位图
因为有第2域,所以第二个位置是1,由第三域,所以第三个位置
是1,。。。
依此类推得到一串数字
0111 0010 0000 0000 0000 0000 0000 0000 0011 0000 1000 0000 0000 0000 0000 0000
转换过来,就是
72 00 00 00 30 80 00 00 这个就是BITMAP了
然后把上面的数据按照BITMAP+每个域的内容,依次排列
就得到这个包的内容了
7200000030800000165309987876545342900000000000000100
20030802063132333435360009123456001083938373635343332
前头再加上TPDU和MSGID就是最后的数据包
很简单把,解包也一样的。
- 浏览: 717875 次
- 性别:
- 来自: 重庆
最新评论
-
superchangme:
show it,you are you:authenticat ...
认证 (authentication) 和授权 (authorization) 的区别 -
深度交流社区:
说的很清楚,学习了
认证 (authentication) 和授权 (authorization) 的区别 -
mazhi4562qq:
你好, 可以请教个关于activiti定时边界事件的问题么?我 ...
Activiti定时任务示例 -
落叶萧萧:
Spring MVC HelloWorld入门例子 -
daniaowansui:
什么垃圾东西?
使用Sping AOP记录操作日志和错误日志
相关推荐
在IT行业的支付领域,ISO 8583标准是一个广泛使用的通信协议,用于银行系统、信用卡交易和其他金融交易中。该标准定义了消息格式、字段和处理规则,以确保金融机构之间的安全、高效的信息交换。下面将详细介绍8583...
在IT行业中,银联ISO8583是一个重要的金融通讯协议,主要用于银行间交易的报文交换,如银行卡授权、转账、查询等操作。本文将深入探讨如何在Java环境中解析银联ISO8583报文,以及如何通过提供的代码示例`Iso8583Util...
在上述例子中,一个简单的消费交易报文被构建。它包括了以下关键域: - **域2**:卡号,如"5309987876545342",使用LLVAR编码,长度16。 - **域3**:交易类型,"900000",长度6,BCD编码。 - **域4**:交易金额,...
6. **C语言实现**:在提供的代码片段中,可以看到一个简单的C语言实现,用于解析ISO8583报文。`master`数组包含了每个域的定义,如字段名称、最大长度、是否必填等信息。 7. **编码规则**:BCD编码是一种将十进制...
对于定长报文,我们需要编写一个编码器,将业务数据转化为固定长度的字节数组;同时,也需要一个解码器,将接收到的字节数组还原为原始的业务数据。 5. **过滤器链的构建**:在Mina中,过滤器链是实现各种功能的...
总结起来,"使用C对嵌入式进行报文指令编程demo"是一个关于嵌入式系统开发的实例,涉及C语言编程、报文指令设计、串口通信等关键知识点。通过学习和实践,开发者可以提升在资源受限环境下的编程技能,更好地应对各种...
java 利用了xml报文传输,在java中使用了dom4j解析器进行对xml字符串解析. c#利用XmlDataDocument解析XML报文的简单应用.
国网698.45报文简单解析软件,基本数据帧都能正常解析。将报文放入最上方的窗口中,自动解析。若有问题请自行尝试!!
4. **模拟环境**:设置一个模拟的工业网络环境,通过编程控制PLC和其他设备,实际发送和接收CIP报文,这将有助于理论知识与实践经验的结合。 5. **故障排查**:当遇到网络或设备通信问题时,学会分析PCAP文件可以...
- **功能码**:一个字节,定义了报文的类型,如读寄存器(0x03)或写单个寄存器(0x06)。 - **数据地址**:两个字节,标识要访问的寄存器的起始地址。 - **数据长度/数量**:两个字节,表示要读取或写入的寄存器...
例如,在一个GetRequest报文中,PDU部分将包含请求的OID列表。 #### 五、实例分析 假设有一个SNMP GetRequest报文,其结构如下: - 版本号(Version) - 社区名(Community Name) - PDU类型(PDU Type) - 请求ID...
以下是一个简单的Lua脚本示例,它可以从HTTP响应中提取Base64编码的图片并保存到本地: ```lua local base64_decode = require("base64") local file = io.open("output.png", "wb") for packet in pdml:iter() do...
在压缩包中的"IEC8705报文解析"可能是一个工具或文档,它详细解释了如何解析按照IEC 870-5标准编码的报文。可能包含以下内容: - 报文结构:介绍报文的组成元素,如报文头、地址字段、控制字段、数据字段和校验字段...
在发送和接收报文的过程中,安全性也是一个重要的考虑点。SNMPv3版本在早期版本基础上增加了安全机制,提供了认证和加密功能,以防止报文被截取和篡改。 此外,要成功实现SNMP通讯,程序员还需要了解网络的基础知识...
以下是一个简单的服务端代码示例: ```java import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) throws Exception { ServerSocket ...
构建一个简单的HTTP服务器的C#程序实例。实现响应GET、POST请求。在服务端创建一个tcp通信来负责监听客户端连接。每次客户端发出请求后,我们根据请问报文来判断客户端的请求类型,然后根据不同的请求类型进行相应的...
一个简单的检错机制可以是:在发送报文时,附加一个简单的序列号,每个报文都有唯一的序列号。接收端收到报文后,根据序列号判断是否重复或丢失,如果有误,可以请求重传。 5. **心跳机制** 实现简易的错误检测...
在这个示例中,我们创建了一个`HttpWebRequest`实例,设置了请求方法为POST,并指定内容类型为表单数据。然后,将用户名和密码编码成字节,写入请求流,最后获取服务器响应。 接下来,我们讨论Cookie在登录过程中的...
上述代码中,`DatatypeConverter.parseHexBinary()`方法用于将16进制字符串转换为字节数组,然后创建一个`DatagramPacket`实例,包含数据和目标服务器的IP地址与端口。最后,通过`DatagramSocket`发送这个数据包。 ...