Конвертировать сообщение из ASCII в HEX ISO8583.net

Мой поставщик услуг биллинга должен получать сообщение в формате 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 ответа

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

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

Что вы подразумеваете под "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)

Другие вопросы по тегам