3

私の課金プロバイダーは、ASCII ではなく HEX でメッセージを取得する必要があります。たとえば、800 メッセージを送信し、ストリームは次のようになりました。

42 00 30 38 30 30 a2 38 00 00 00 80 80 00 04 00

00 00 00 00 00 00 39 30 30 30 30 30 30 34 30 32

31 34 33 31 31 38 31 37 33 31 31 38 31 37 33 31

31 38 30 34 30 32 31 32 33 34 35 36 37 38 39 39

38 30 30 31

プロジェクトを使用してメッセージを ASCII ではなく HEX として作成できますか? メッセージを送信する前に変換する必要がありますか (そして、返信メッセージで元に戻す必要がありますか?)

よろしくお願いいたします。

4

2 に答える 2

2

フィールド、ビットマップ、およびメッセージタイプのフォーマッタを変更できます。

Templateクラスでプロジェクトのソースを確認します。Iso8583を拡張する独自のクラスを作成し、ASCIIビットマップおよびメッセージタイプフォーマッターを含む独自のテンプレートを作成する必要があります。

0.5.1リリースから、次のことができます。

public class AsciiIso : Iso8583
{
    private static readonly Template template;

    static AsciiIso()
    {
        template = GetDefaultIso8583Template();
        template.BitmapFormatter = Formatters.Ascii;
        template.MsgTypeFormatter = Formatters.Ascii;
    }

    public AsciiIso() : base(template)
    {
    }
}
于 2012-04-03T14:36:09.847 に答える
0

「ASCIIではなくHEX」とはどういう意味ですか?HEX文字列は通常、[0-9A-F]文字のみで構成されるASCIIエンコード文字列です。

これは、バイト配列を元のバイト配列のバイトを表す16進数のペアの文字列に変換するC#拡張メソッドです。

using System;
using System.Linq;
using System.Text;

namespace Substitute.With.Your.Project.Namespace.Extensions
{
    static public class ByteUtil
    {
        /// <summary>
        /// byte[] to hex string
        /// </summary>
        /// <param name="self"></param>
        /// <returns>a string of hex digit pairs representing this byte[]</returns>
        static public string ToHexString(this byte[] self)
        {
            return self
                .AsEnumerable()
                .Aggregate(
                    new StringBuilder(),
                    (sb, value)
                        => sb.Append(
                            string.Format("{0:X2}", value)
                           )
                ).ToString();
        }
    }
}

その後、他の場所であなたはただuseの拡張子

using Substitute.With.Your.Project.Namespace.Extensions;

このように呼んでください

aByteArray.ToHexString();

(コードはテストされていません; YMMW)

于 2012-04-03T07:34:57.923 に答える