У меня есть массив байтов result
. Я хотел бы преобразовать свой тип с именем Info
, которые все int
в массив байтов, но все они имеют разный размер.Преобразование int в разные размеры массива байтов
а = 4 байта
б = 3 байта
с = 2 байта
д = 1 байт
Это код, я попробовал.
private byte[] getInfoByteArray(Info data)
{
byte[] result = new byte[10];
BitConverter.GetBytes((data.a)).CopyTo(result, 0);
BitConverter.GetBytes((data.b)).CopyTo(result, 4);
BitConverter.GetBytes((data.c)).CopyTo(result, 7);
result [9] = Convert.ToByte(data.d);
return result;
}
Однако, я узнал, что BitConverter.GetBytes
возвращает 4 байта.
Существуют ли какие-либо общие решения, которые могут иметь разный размер байтов для байтового массива?
'int' всегда хранится как 4 байта. 'GetBytes()' не всегда возвращает только массивы байтов длиной 4, это только потому, что вы используете тип данных 'int'. Вы можете использовать [этот ответ] (http://stackoverflow.com/a/11651620/74757) для вычисления минимального количества байтов, необходимых для хранения целых значений (предположительно возвращающих размеры 4, 3, 2 и 1, как указано), затем обрезать результат '.GetBytes()' до этой длины перед копированием в ваш последний массив байтов. –
Непонятно, почему вам нужны разные длины байтов для ваших полей, особенно если все они являются фактически 'int'. Если вы уверены, что вам действительно нужны только 3, 2 или 1 байт для b, c и d, тогда c и d могут быть 'short' и' byte', что дает вам именно то, что вам нужно. Ваш результат для b зависит от endianness, но вы можете усечь массив, например. 'Array.Copy (BitConverter.GetBytes (data.b), 0, result, 4, 3)'. То есть если вам не нужны все байты, тогда ** не копируйте все байты **. –