C# 整数列表的字节长度

C# 整数列表的字节长度,c#,arrays,integer,byte,C#,Arrays,Integer,Byte,我有一个整数列表{20,40},我想得到列表中字节总数的长度 因为有两个整数,每个整数是4个字节,所以在这个例子中字节的总长度是8 如果有3个整数,答案是12 我的想法是循环遍历每个整数,并使用位转换器获取每个整数的字节,但我似乎无法附加到字节数组中 var bytes = new byte[] { }; foreach (var num in nums) { bytes = BitConverter.GetBytes(num); } 然后,我们将获得字节数组的长度,但此方法只执行1个值

我有一个整数列表{20,40},我想得到列表中字节总数的长度

因为有两个整数,每个整数是4个字节,所以在这个例子中字节的总长度是8

如果有3个整数,答案是12

我的想法是循环遍历每个整数,并使用位转换器获取每个整数的字节,但我似乎无法附加到字节数组中

var bytes = new byte[] { };
foreach (var num in nums)
{
  bytes = BitConverter.GetBytes(num);

}
然后,我们将获得字节数组的长度,但此方法只执行1个值。

如果您只需要字节数:
sizeof(int)*nums.Count
(或者
sizeof(int)*nums.Capacity
如果您需要超大备份数组的大小)

假设您需要数据:

不能使用
位转换器
追加字节;你可以依次复制,但老实说,这不是一个好主意;您可以循环应用偏移量并使用其他API写入现有缓冲区,但是-其他工具存在;考虑:

var nums=新列表{20,40};
var arr=MemoryMarshal.Cast(CollectionsMarshal.AsSpan(nums)).ToArray();
//这只是一种显示输出的惰性方式
Console.WriteLine(位转换器.ToString(arr));
注意,这是CPU端;如果您需要它在所有CPU上以相同的方式工作,则需要使用endian感知方法,例如
BinaryPrimitives
。例如:

byte[]arr=新字节[sizeof(int)*nums.Count];
var跨度=新跨度(arr);
foreach(以nums为单位的var num)
{
BinaryPrimitives.WriteInt32BigEndian(span,num);
span=span.切片(4);
}

这不是一个简单的
nums.Count()*sizeof(int)
的数学练习,有什么原因吗?@Llama是的,你是对的,我没想过,感谢从技术上讲,列表使用的内存量是基于内部数组的大小,该数组实际上可以大于列表中当前的项目数。@juharr幸运的是,您可以从
nums.Capacity
(乘以
sizeof(int)
)中获得该大小