java 报文长度_关于报文长度的理解

不知不觉做接口系统也有较长时间,对接口系统来说,会遇到各式各样的报文如8583报文、类8583报文及各种软件商家自定义的报文。

面对交易流程:接收请求报文----》处理报文-----》接收响应报文。

接收请求报文、发送响应报文因是tcp传送,基本上会在报文最前端加入一个报文长度(表示之后的报文有长,以便对方的机器进行接收)。

报文长度的表示方法中较常见的如:

1)用n(一般为4、6)字节来表示报文长度;即也称字符串表示报文长度。(即是一个右靠齐的方式,左补数字0)---------------这种方式是最简单的也是最常见的。

如:报文长度为123.

当n=4时:“0123”

当n=6时:“000123”

2)可能你会碰到下面的这种形式

消息头格式

参数名称

类型

长度

备    注

1

消息总长度

INTEGER

4

消息长度(字节)

2

协议版本

ASCII

4

与协议的版本同步,如“0101”代表v1.01 咋看消息总长度的表示方式:你就会有些不懂,(特别当你是用C语言的人时,则会很吃惊.书上int不是2字节嘛,不同机器可能会不样处理,这里就不多说)。

其实可以这样理解,目前所处理的都是以字节(不必去区分什么大端、小端的问题)做为最小单位来存储数据。所以当看到上面的长度是一个INTEGER,用4个字节来存。理解为:是用4*8=32比特位来存储INTEGER变量,高位在低字节(如C语言表示:char length[4],length[0]存储最高的8位,length[3]存储最低的8位)。

如:报文长度是len=295;

C语言表示:

caMsgBuf[0] = (iLen & 0xff000000) >> 24;

caMsgBuf[1] = (iLen & 0x00ff0000) >> 16;

caMsgBuf[2] = (iLen & 0x0000ff00) >> 8;

caMsgBuf[3] = (iLen & 0x000000ff); JAVA表示:

byte[] buf = new byte[4];

buf[0] = (byte)((l & 0xff000000) >> 24);

buf[1] = (byte)((l & 0xff0000) >> 16);

buf[2] = (byte)((l & 0xff00) >> 8);

buf[3] = (byte)(l & 0xff);

从上可以看出不同语言的处理方式基本相同。

3)其他较件厂商的基本也是以二的变种。仔细分析,没有什么问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值