Конвертировать сообщение из 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)