首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenISO8583.Net BCD修复格式解包错误

OpenISO8583.Net BCD修复格式解包错误
EN

Stack Overflow用户
提问于 2012-05-15 17:15:46
回答 1查看 428关注 0票数 0

我从code.google下载了代码,并获得了最新版本v0.5.2

我设置了一个bcd fix格式的字段,它是bcd格式的N-6 (bit._003_proc_code)

对于ex:

*字段定义:

代码语言:javascript
复制
 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) },                     ..............                }

用法:

代码语言:javascript
复制
Iso8583 msg =new Iso8584();
msg[3]="000000";

当我解开消息时,我只能从消息3中得到“0000”。

这是错误还是定义中的错误

EN

回答 1

Stack Overflow用户

发布于 2012-05-16 12:53:53

我会等待John Oxley的消息,看看这是否只是一个编码错误。现在我说了,我认为这是一个bug。

我在BcdFixed定义上遇到了问题,最终创建了一个新的定长BCD格式化程序来解决这个问题。

下面是我所做的:

  1. 我创建了一个名为FixedLengthBcdFormatter的类,它是FixedLengthFormatter类的变体。

/固定字段格式化程序/公共类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

}

  • 修改了FieldDescription类/ BcdFixed声明

/修复bcd。// public static IFieldDescriptor BcdFixed(int unpackedLength) { return Create(new FixedLengthBcdFormatter(unpackedLength),FieldValidators.N,Formatters.Bcd,null);}

  • 然后更改格式化程序声明,以提供未打包的长度作为参数。

Bit._003_PROC_CODE,FieldDescriptor.BcdFixed(6)},

同样,所有这些都可能是不必要的,因为我对现有代码一无所知,但它对我来说是有效的。

我希望这能帮到你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10597621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档