草庐IT

c# - In 和 Out 属性在 .NET 中如何工作?

我一直在尝试使用以下代码跨AppDomain边界序列化一个数组:publicintRead(byte[]buffer,intoffset,intcount){returnbase.Read(buffer,offset,count);}作为猜测,在注意到别处的属性后,我用[In]和[Out]属性标记了方法的参数,这似乎导致了参数的行为就好像它们是通过引用传递的一样。例如:publicintRead([In,Out]byte[]buffer,intoffset,intcount){returnbase.Read(buffer,offset,count);}在我添加属性之前,buffer变量

c# - .net 中的转换 : Native Utf-8 <-> Managed String

我创建了这两种方法来将nativeutf-8字符串(char*)转换为托管字符串,反之亦然。以下代码完成这项工作:publicIntPtrNativeUtf8FromString(stringmanagedString){byte[]buffer=Encoding.UTF8.GetBytes(managedString);//notnullterminatedArray.Resize(refbuffer,buffer.Length+1);buffer[buffer.Length-1]=0;//terminating0IntPtrnativeUtf8=Marshal.AllocHGlob

c# - 这个 goto 有表现力吗?

以下代码是消息批处理例程的概念证明。我是否像避免瘟疫一样避免goto并重写这段代码?还是您认为goto是完成此操作的一种表达方式?如果您要重写,请发布一些代码...varqueue=newQueue(this.batch);while(this.connected){byte[]buffer=null;try{socket.Recv(outbuffer);}catch{//ignoretheexceptionwegetwhenthesocketisshutdownfromanotherthread//theconnectedflagwillbesettofalseandwe'llbre

C# 将 span 与 SocketAsyncEventArgs 结合使用

我想使用新的Span将非托管数据直接发送到使用SocketAsyncEventArgs的套接字但似乎SocketAsyncEventArgs只能接受Memory不能用byte*初始化或IntPt请问有没有一种方法可以将span与SocketAsyncEventArgs一起使用??感谢您的帮助。 最佳答案 正如评论中已经提到的,Span在这里是错误的工具——你有没有考虑过使用Memory反而?正如您所说,SetBuffermethod确实接受它作为参数-你有什么理由不能使用它吗?另见thisarticle有关堆栈与堆分配如何应用于Sp

c# - 使用 C# 从 TCP 流中解析串联的、非定界的 XML 消息

我正在尝试解析通过TCP发送到我的C#应用程序的XML消息。不幸的是,协议(protocol)无法更改,XML消息没有定界,也没有使用长度前缀。此外,字符编码不固定,但每条消息都以XML声明开头.问题是,我如何使用C#一次读取一条XML消息。到目前为止,我尝试将数据从TCP流读取到字节数组中并通过MemoryStream使用它.问题是,缓冲区可能包含多个XML消息,或者第一条消息可能不完整。在这些情况下,我在尝试使用XmlReader.Read解析它时遇到异常或XmlDocument.Load,但不幸的是XmlException并不能真正让我区分问题(解析本地化错误字符串除外)。我尝试

c# - 用于解析二进制消息包的字节流的高效 C# 字节队列

我正在尝试替换我通常实现的循环缓冲区+。队列的功能是缓冲传入的字节(例如,来自串行端口或其他一些数据流),同时解析器检查队列中的字节并检测和提取消息包。标准:可以增长(即不是固定大小)>=1bytescanbeenqueuedatatime>=1bytescanbedequeuedatatime高效我很想用System.Collections.Generic.Queue...但我不确定这是否是最有效的类型。有什么建议吗?有没有更聪明的方法来做我想做的事情?(例如,有趣的建议here)感谢您的建议和意见。普兰博。 最佳答案 嗯,Que

c# - C#中缓冲区和流的区别

这个问题在这里已经有了答案:WhatisthedifferencebetweenBufferedStreamandMemoryStreamintermsofapplication?(2个答案)关闭5年前。我读到Buffer是一个字节序列。但我也读到Stream也是一个字节序列。那么Stream和Buffer有什么区别呢?

c# - ProtoBuf-Net 和 Compact Framework 出现 "Invalid field in source data: 0"错误

有人知道使用ProtoBuf-Net在紧凑框架和完整.Net框架之间进行序列化/反序列化时有任何问题吗?我有一个名为LogData的类,我正在compactframework3.5下序列化,传输到服务器(运行.Netframework4.0),然后反序列化。有时它有效,有时它会抛出上述错误,我还没有将其缩小到任何特定原因。我用不同的值做了很多测试,但似乎无法找到错误发生时的任何韵律或原因。我在下面包括我的类(class)(减去各种构造函数)。我已多次查看两侧的字节缓冲区,但尚未发现通过线路从一侧发送到另一侧的数据存在差异。[ProtoContract]publicclassLogDat

c# - Httplistener 和文件上传

我正在尝试从我的网络服务器检索上传的文件。当客户端通过网络表单(随机文件)发送其文件时,我需要解析请求以获取文件并进一步处理它。基本上,代码如下:HttpListenerContextcontext=listener.GetContext();HttpListenerRequestrequest=context.Request;StreamReaderr=newStreamReader(request.InputStream,System.Text.Encoding.Default);//thisistheretrievedfilefromstreamreaderstringfile=

c# - 使用 LINQ 在字节数组中搜索以特定字节开始/结束的所有子数组

我正在处理一个COM端口应用程序,我们有一个定义的可变长度数据包结构,我正在用它与微Controller通信。数据包具有用于起始字节和停止字节的定界符。问题是有时读取缓冲区可能包含无关的字符。似乎我总是会得到整个数据包,只是在实际数据之前/之后的一些额外的喋喋不休。所以我有一个缓冲区,每当从COM端口接收到新数据时,我都会将数据附加到该缓冲区。搜索此缓冲区以查找任何可能出现的数据包的最佳方法是什么?例如:假设我的数据包定界符是0xFF并且我有一个这样的数组{0x00,0xFF,0x02,0xDA,0xFF,0x55,0xFF,0x04}我如何创建一个函数/LINQ语句来返回所有以分隔符