Конвертировать сообщение из ASCII в HEX ISO8583.net - PullRequest
3 голосов
/ 02 апреля 2012

мой провайдер выставления счетов должен получить сообщение в HEX, а не в ASCII, например, я отправил сообщение 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

Могу ли я использовать проект для создания сообщения как HEX вместо ASCII? Нужно ли мне конвертировать сообщение перед отправкой (и конвертировать обратно при возврате сообщения)?

Буду признателен за помощь в этом вопросе

Ответы [ 2 ]

2 голосов
/ 03 апреля 2012

Вы можете изменить форматеры для полей, растровых изображений и типов сообщений.

Посмотрите на источник проекта в классе 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)
    {
    }
}
0 голосов
/ 03 апреля 2012

Что вы подразумеваете под "HEX, а не ASCII"? Строка HEX обычно представляет собой строку в кодировке ASCII, состоящую только из символов [0-9A-F].

Вот метод расширения 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)

...