簡體   English   中英

如何在c#中將結構轉換為字節數組

[英]How to turn a struct into a byte array in c#

我在c#中有一個帶有兩個成員的結構:

public int commandID;  
public string MsgData;  

我需要將這兩個轉換為單個字節數組,然后將其發送到將解包字節的C ++程序,它將獲取第一個`sizeof(int)字節以獲取commandID,然后其余的MsgData將被使用。

在c#中執行此操作的好方法是什么?

以下將返回一個常規字節數組,前四個表示命令ID,其余表示消息數據,ASCII編碼和零終止。

static byte[] GetCommandBytes(Command c)
{
    var command = BitConverter.GetBytes(c.commandID);
    var data = Encoding.UTF8.GetBytes(c.MsgData);
    var both = command.Concat(data).Concat(new byte[1]).ToArray();
    return both;
}

如果您願意,可以將Encoding.UTF8切換為例如Encoding.ASCII - 只要您的C ++使用者可以解釋另一端的字符串。

這直接轉到字節數組。

public byte[] ToByteArray(int commandID, string MsgData)
{
    byte[] result = new byte[4 + MsgData.Length];

    result[0] = (byte)(commandID & 0xFF);
    result[1] = (byte)(commandID >> 8 & 0xFF);
    result[2] = (byte)(commandID >> 16 & 0xFF);
    result[3] = (byte)(commandID >> 24 & 0xFF);
    Encoding.ASCII.GetBytes(MsgData.ToArray(), 0, MsgData.Length, result, 4);

    return result;
}

這將為您提供所需的byte[] 這里需要注意的一件事是我沒有使用序列化程序,因為你想要一個非常原始的字符串,並且沒有序列化器(我知道)可以將它序列化,就像你想要的OOB一樣。 然而,這是一個如此簡單的序列化,這更有意義。

var bytes = Encoding.UTF8.GetBytes(string.Format("commandID={0};MsgData={1}", o.commandID, o.MsgData));

最后,如果您有更多我不知道的屬性,您可以使用反射。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM