我有两种List:一个带有int元素的列表和另一个带有bool元素的列表。要将这些列表传递给服务器,我必须执行以下操作:
using(MemoryStream m = new MemoryStream()){
using(BinaryWriter writer = new BinaryWriter(m)){
byte[] bytesIntList = new byte[IntList.Count * sizeof(int)];
Buffer.BlockCopy(IntList.ToArray(), 0, bytesIntList, 0, bytesIntList.Length);
writer.Write(Convert.ToBase64String(bytesIntList));
byte[] bytesBoolList = new byte[BoolList.Count * sizeof(bool)];
Buffer.BlockCopy(BoolList.ToArray(), 0, bytesBoolList, 0, bytesBoolList.Length);
writer.Write(Convert.ToBase64String(bytesBoolList));
}
byte[] data = m.ToArray();
return data;
}
现在,我想知道如何进行相反的处理:收到这些列表:
using (MemoryStream m = new MemoryStream(data)){
using (BinaryReader reader = new BinaryReader(m)){
byte[] bytesIntList = Convert.FromBase64String(reader.ReadString());
byte[] bytesBoolList = Convert.FromBase64String(reader.ReadString());
List<int> newIntList = ??? //what do I have to do here?
List<bool> newBoolList = ??? //what do I have to do here?
}
}
如果您有其他建议通过列表,我们欢迎您!
答案 0 :(得分:1)
你的问题是虽然有一种方法可以轻松地从一个字节数组转换为一个int数组,但是不是从字节数组到列表的一种方式英格兰。
您必须先将其转换为数组(就像保存时一样),否则您必须一次通过字节缓冲区。
首先转换为数组如下所示:
byte[] data = new byte[1000]; // Pretend this is your read-in data.
int[] result = new int[data.Length/sizeof(int)];
Buffer.BlockCopy(data, 0, result, 0, data.Length);
List<int> list = result.ToList();
我认为将它一次转换为int会更好,因为您不需要首先将其转换为数组:
byte[] data = new byte[1000]; // Pretend this is your read-in data.
List<int> list = new List<int>();
for (int i = 0, j = 0; j < data.Length; ++i, j += sizeof(int))
list.Add(BitConverter.ToInt32(data, j));
要将字节数组转换为bool数组,您可以这样做:
byte[] data = new byte[1000]; // Pretend this is your read-in data.
List<bool> list = new List<bool>();
for (int i = 0, j = 0; j < data.Length; ++i, j += sizeof(bool))
list.Add(BitConverter.ToBoolean(data, j));
或者,为了将字节转换为bool,我们可以使用Linq(将字节转换为整数并不容易):
byte[] data = new byte[1000]; // Pretend this is your read-in data.
List<bool> list = (from b in data select b != 0).ToList();
或使用方法而不是查询语法(如果您愿意):
byte[] data = new byte[1000]; // Pretend this is your read-in data.
List<bool> list = data.Select(b => b != 0).ToList();