C# преобразовать объект[] в байт [], но как сохранить объект byte как байт?

Я использую преобразование массива различных типов значений в массив байтов решение для преобразования моих объектов в массив байтов.

но у меня есть небольшая проблема, которая вызывает большую проблему.

есть" байтовый " тип данных в mids объекта [], я не знаю, как сохранить "байт" как есть. Мне нужно сохранить одинаковую длину байтов до и после.

Я попытался добавить тип "byte" в словарь следующим образом:

private static readonlyDictionary<Type, Func<object, byte[]>> Converters =
    new Dictionary<Type, Func<object, byte[]>>()
{
    { typeof(byte), o => BitConverter.GetBytes((byte) o) },
    { typeof(int), o => BitConverter.GetBytes((int) o) },
    { typeof(UInt16), o => BitConverter.GetBytes((UInt16) o) },
    ...
};
public static void ToBytes(object[] data, byte[] buffer)
{
    int offset = 0;

    foreach (object obj in data)
    {
        if (obj == null)
        {
            // Or do whatever you want
            throw new ArgumentException("Unable to convert null values");
        }
        Func<object, byte[]> converter;
        if (!Converters.TryGetValue(obj.GetType(), out converter))
        {
            throw new ArgumentException("No converter for " + obj.GetType());
        }

        byte[] obytes = converter(obj);
        Buffer.BlockCopy(obytes, 0, buffer, offset, obytes.Length);
        offset += obytes.Length;
    }
}

нет syntext жалуюсь, но я проследил этот код, после того как программа выполнена

byte[] obytes = converter(obj);

исходный "байт" становится байтом[2].

что здесь происходит? Как сохранить значение byte аутентичным в этом решении?

спасибо!

1 ответов


нет BitConverter.GetBytes перегрузка, которая принимает byte, Так что ваш код:

BitConverter.GetBytes((byte) o)

неявно расширяется в ближайший матч:BitConverter.GetBytes(short) (Int16), что приводит к двум байтам. Все, что вам нужно сделать, это вернуть одноэлементный байтовый массив, например, так:

{ typeof(byte), o => new[] { (byte) o } }