Trx库中的ISO8583消息头



我使用了Trx ISO 8583库。此库以十六进制发送消息长度。但我需要发送4个字节的Ascii字符作为消息头。如何做到这一点?

若要更改消息头,应更改NboFrameLengthSink类位于Trx=>通信=>接收器=>NboFrameLengthSink.cs

代码下公共无效发送(PipelineContext上下文)函数的更改

buffer.Write(true, _bytesInHeader == 2
                ? new[] {(byte) (length >> 8), (byte) length}
                : new[] {(byte) (length >> 24), (byte) (length >> 16), (byte) (length >> 8), (byte) (length)});

string ls_length;
ls_length = length.ToString("####").PadLeft(4,'0');
byte[] ascii = System.Text.Encoding.ASCII.GetBytes(ls_length);
buffer.Write(true, _bytesInHeader == 2
 ? new[] { (byte)(length >> 8), (byte)length }
 : ascii);

函数中的public bool Receive(PipelineContext上下文)

代码

context.ExpectedBytes = ( header[0] << 24 ) | ( header[1] << 16 ) | ( header[2] << 8 ) | header[3];

更改为

context.ExpectedBytes = header[0] | header[1] | header[2] | header[3];

如果您需要以Ascii发送消息,但位图为HEX执行以下操作:

在Iso8583Asii1987.xml congif文件更改

<!-- Add first bitmap -->
<Invoke Name="Add">
  <Parameter Type="BitMapFieldFormatterFactory">
    <Property Name="FieldNumber" Value="0" />
    <Property Name="Description" Value="Primary bitmap" />
    <Property Name="Encoder" Reference="DataEncoderFactory" />
    <Property Name="LowerFieldNumber" Value="1" />
    <Property Name="UpperFieldNumber" Value="64" />
  </Parameter>
</Invoke>
<!-- Add secondary bitmap (field number 1) -->
<Invoke Name="Add">
  <Parameter Type="BitMapFieldFormatterFactory">
    <Property Name="FieldNumber" Value="1" />
    <Property Name="Description" Value="Secondary bitmap" />
    <Property Name="Encoder" Reference="DataEncoderFactory" />
    <Property Name="LowerFieldNumber" Value="65" />
    <Property Name="UpperFieldNumber" Value="128" />
  </Parameter>
</Invoke>

最新更新