C# Python';C中的s结构包#

C# Python';C中的s结构包#,c#,python,memorystream,pack,C#,Python,Memorystream,Pack,我试图用C#复制下面的语句。如过程所示,packlength是一个根据“!表示长值的l'格式(网络字节顺序-大端) 我尝试了以下几点: using (MemoryStream stream = new MemoryStream()) { using (BinaryWriter writer = new BinaryWriter(stream)) { writer.Write ((long)(packetData.Length+10));

我试图用C#复制下面的语句。如过程所示,packlength是一个根据“!表示长值的l'格式(网络字节顺序-大端)

我尝试了以下几点:

using (MemoryStream stream = new MemoryStream()) {
        using (BinaryWriter writer = new BinaryWriter(stream)) {
                    writer.Write ((long)(packetData.Length+10));
        }
}
程序正确吗?如果是这样,我如何从内存流访问结果“字符串”?

C#等效

var bytes=BitConverter.GetBytes((long)packetdata.length) 
更新: John skeet有一个非常好的用于处理字节顺序的库

您可以使用以下代码:

byte[] bytes = BitConverter.GetBytes(
    IPAddress.HostToNetworkOrder((long)packetdata.length + 10)
);
这读起来相当糟糕,所以您希望将IPAddress.HostToNetworkOrder包装在另一个类中,作为一个静态方法,以提高可行性。毕竟,在进行主机到网络订单转换时,谁希望看到IPAddress


尽管Python代码使用字符串来保存缓冲区,但它们实际上不是字符串。这里的原因是字节数组,这就是上面代码产生的。

注意,在python中,
str
类型有另一个名称,
bytes
byte[] bytes = BitConverter.GetBytes(
    IPAddress.HostToNetworkOrder((long)packetdata.length + 10)
);