Я пытаюсь написать общий метод, который преобразует массив любого типа в массив байтов.Преобразование любого типа массива в байты [] переменной длины в C#
method definition:
public byte[] convert_item_to_bytes(dynamic items)
{
byte[] bytearr = ??
//I tried blockcopy, but i am not getting the correct number of elements
//Buffer.BlockCopy(items, 0, bytearr, 0, items.Length);
return bytearr;
}
examples of my method calls:
convert_item_to_bytes(new int16[]{0x1234, 0x4567, 0x9574});
convert_item_to_bytes(new int32[]{0x3545, 0x3352, 0x9642, 0x5421});
convert_item_to_bytes(new uint64[]{0x4254, 0x8468});
//etc.... my method calls can also be of float type.
Я использую динамику в определении, потому что я узнаю тип онлайн во время выполнения.
PS: Я видел еще один пример, который использует BinaryFormatter и MemoryStream. Я не хочу это использовать. (How to convert byte array to any type)
Есть ли другой способ решить эту проблему?
Я заглянул в [BinaryWriter] (https://msdn.microsoft.com/en-us/library/system.io.binarywriter (v = vs.110) .aspx? F = 255 & MSPPError = -2147217396)/[BinaryReader] (https://msdn.microsoft.com/en-us/library/system.io.binaryreader (v = vs.110) .aspx). –
Вы можете ответить на это, если знаете **, как ** вы можете «преобразовать» любой произвольный объект в массив байтов. Посылка as-is совершенно бессмысленна, так как вам придется прибегать к двоичной сериализации, что и есть для BinaryFormatter. Если «любой тип массива» на самом деле означает «любой числовой тип массива», он [становится немного проще] (https://msdn.microsoft.com/en-us/library/system.bitconverter.getbytes (v = vs. 110) .aspx). – CodeCaster