我从code.google下载了代码,并获得了最新版本v0.5.2
我设置了一个bcd fix格式的字段,它是bcd格式的N-6 (bit._003_proc_code)
对于ex:
*字段定义:
DefaultTemplate =new Template { { Bit.\_002\_PAN, FieldDescriptor.BcdVar(2, 19,Formatters.Ascii) }, { Bit.\_003\_PROC\_CODE, FieldDescriptor.BcdFixed(3)}, { Bit.\_004\_TRAN\_AMOUNT, FieldDescriptor.BcdFixed(6) }, .............. }用法:
Iso8583 msg =new Iso8584();
msg[3]="000000";当我解开消息时,我只能从消息3中得到“0000”。
这是错误还是定义中的错误
发布于 2012-05-16 12:53:53
我会等待John Oxley的消息,看看这是否只是一个编码错误。现在我说了,我认为这是一个bug。
我在BcdFixed定义上遇到了问题,最终创建了一个新的定长BCD格式化程序来解决这个问题。
下面是我所做的:
/固定字段格式化程序/公共类FixedLengthBcdFormatter : ILengthFormatter {私有只读int _packedLength;私有只读int _unPackedLength;
/固定长度字段格式化程序/字段的未打包长度。public FixedLengthBcdFormatter(int unPackedLength) { _unPackedLength = unPackedLength;double len = _unPackedLength;_packedLength = (int)Math.Ceiling(len / 2);} #region ILengthFormatter Members /获取封装长度指示符的长度。固定长度字段为0/ public int LengthOfLengthIndicator { get { return 0;}}/描述符字段的最大长度/公共字符串MaxLength { get { return _unPackedLength.ToString();}}/ ToString方法中使用的长度格式化工具的描述符/公共字符串描述{ get { return "FixedBcd";}}/获取字段长度/消息数据字节数组/开始解析的偏移量/公共int GetLengthOfField(byte[] msg,int offset) { _unPackedLength;}/将length头部打包到消息中/消息的字节数组/要打包到消息中的长度/ Offset开始打包/字段public int Pack(byte[] msg,int length,int offset) { return offset;}/检查字段长度是否有效/字段的封装长度/如果有效,则为true,否则为false public bool IsValidLength(int packedLength) { return packedLength == _packedLength;} #endregion
}
/修复bcd。// public static IFieldDescriptor BcdFixed(int unpackedLength) { return Create(new FixedLengthBcdFormatter(unpackedLength),FieldValidators.N,Formatters.Bcd,null);}
Bit._003_PROC_CODE,FieldDescriptor.BcdFixed(6)},
同样,所有这些都可能是不必要的,因为我对现有代码一无所知,但它对我来说是有效的。
我希望这能帮到你。
https://stackoverflow.com/questions/10597621
复制相似问题