关于报文长度的理解

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

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

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

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

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

如:报文长度为123.

    当n=4时:“0123”

    当n=6时:“000123”

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

 消息头格式

参数名称

类型

长度

备    注

消息总长度

INTEGER

4

消息长度(字节)

协议版本

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)其他较件厂商的基本也是以二的变种。仔细分析,没有什么问题。

你可能感兴趣的:(接口系统,报文长度)