我试图在C#中重现以下语句。如过程所示, packlength 是根据'!l'格式打包的字符串,表示 long值(以网络字节顺序 - 大端)。
packlength=struct.pack('!l', len(packetdata)+10)
我尝试了以下内容:
using (MemoryStream stream = new MemoryStream()) {
using (BinaryWriter writer = new BinaryWriter(stream)) {
writer.Write ((long)(packetData.Length+10));
}
}
程序是否正确?如果是这样,我如何从内存流中访问结果“字符串”?
答案 0 :(得分:1)
等效的C#是
var bytes=BitConverter.GetBytes((long)packetdata.length)
更新: Jon skeet有一个非常好的库用于播放字节顺序。检查以下链接
答案 1 :(得分:1)
您可以使用此代码:
byte[] bytes = BitConverter.GetBytes(
IPAddress.HostToNetworkOrder((long)packetdata.length + 10)
);
这读取得非常糟糕,因此您希望将IPAddress.HostToNetworkOrder作为静态方法包装在另一个类中,以提高可行性。毕竟,谁想在进行网络订单转换主机时看到IPAddress?
虽然你的Python代码使用字符串来保存缓冲区,但它们并不是真正的字符串。为什么你这里有一个字节数组,这就是上面代码产生的结果。