Я использую преобразование массива различных типов значений в байтовый массив для преобразования моих объектов в байтовый массив.
Но у меня есть небольшая проблема, которая вызывает большую проблему.
В середине объекта [] есть данные типа «байт», я не знаю, как сохранить «байт» как есть. Мне нужно сохранить одинаковую длину байтов до и после.
Я попытался добавить тип «байт» в словарь следующим образом:
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;
}
}
синтаксиса нет, но я отследил этот код после выполнения программы
byte[] obytes = converter(obj);
исходный «байт» становится байтом [2].
Что здесь происходит? Как сохранить подлинность значения байта в этом решении?
Спасибо!
GetBytes
возвращает массив. Что именно вы пытаетесь сделать здесь, потому что это не ясно. - person Mike Perrenoud   schedule 03.08.2013