和C++的代碼進行socket通信,傳送的資料大小是不固定的,所以沒有辦法用Marshal來做轉換。
bitconvert 結構體太多,資料量太大沒辦法轉換。請教大神怎么做。
public struct DemoParametersFrame,
{
public int CMD_ID;
public int Total_Size;
public int Param_ID;
public int Param_Size;
public byte[] Param_Data; //非固定長度,
};
uj5u.com熱心網友回復:
不要一次發完啊,分包發送uj5u.com熱心網友回復:
也可以不用Marshal的。下例是發送了例子,接收可以自己寫,比如用BinaryReader。
public struct DemoParametersFrame
{
public int CMD_ID;
public int Total_Size;
public int Param_ID;
public int Param_Size;
public byte[] Param_Data; //非固定長度,
public void WriteToStream(Stream stream)
{
if (Param_Size < 0 || Param_Size > (Param_Data?.Length ?? 0)) throw new InvalidOperationException();
if (Total_Size != 4 * sizeof(int) + Param_Size) throw new InvalidOperationException();
using (var writer = new BinaryWriter(stream, Encoding.UTF8, leaveOpen: true))
{
writer.Write(CMD_ID);
writer.Write(Total_Size);
writer.Write(Param_ID);
writer.Write(Param_Size);
if (Param_Data != null) writer.Write(Param_Data, 0, Param_Size);
}
}
}
uj5u.com熱心網友回復:
這是將結構體拆包了,其實我的byte陣列就是要從很多結構體過來的。所以問題的根源是我要找到一種辦法可以將我很多結構體轉成byte陣列的方法。
uj5u.com熱心網友回復:
二進制序列化。或者xml,json序列化,再轉成byte[]唄轉載請註明出處,本文鏈接:https://www.uj5u.com/net/77832.html
標籤:C#
下一篇:如何實作跨網段掃描IP地址
