我在C#中得到以下内容:
string typename = "System.Int32";
string value = "4";
Run Code Online (Sandbox Code Playgroud)
应该采用这两个字符串来生成具有指定值的指定类型的对象...
结果应该是:
object o = CreateUnknownType(typename, value);
...
Int32 test = (Int32)o;
Run Code Online (Sandbox Code Playgroud) 我目前正在优化一个应用程序,其中一个经常执行的操作是读写二进制文件.我需要两种类型的功能:
Set(byte[] target, int index, int value);
int Get(byte[] source, int index);
Run Code Online (Sandbox Code Playgroud)
有符号和无符号short,int和long都需要这些函数,包括大端和小端序.
以下是我所做的一些例子,但我需要对优缺点进行评估:
第一种方法是使用Marshal将值写入byte []的内存中,第二种方法是使用普通指针来完成此操作,第三种方法使用BitConverter和BlockCopy来执行此操作
unsafe void Set(byte[] target, int index, int value)
{
fixed (byte* p = &target[0])
{
Marshal.WriteInt32(new IntPtr(p), index, value);
}
}
unsafe void Set(byte[] target, int index, int value)
{
int* p = &value;
for (int i = 0; i < 4; i++)
{
target[offset + i] = *((byte*)p + i);
}
}
void Set(byte[] target, int index, int value)
{
byte[] data = …
Run Code Online (Sandbox Code Playgroud) 我对 System.Net.Sockets.Socket 的异步 Receive 方法有一个严重的问题。
这是我用来打开连接的代码:
_socket = new Socket(endpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
_socket.Connect(endpoint);
byte[] buffer = new byte[1024];
_socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveCallback, buffer);
Run Code Online (Sandbox Code Playgroud)
这是回调方法:
private void ReceiveCallback(IAsyncResult result)
{
byte[] buffer = (byte[])result.AsyncState;
int count = _socket.EndReceive(result);
if (count > 0)
{
// Do something
}
buffer = new byte[1024];
_socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveCallback, buffer);
}
Run Code Online (Sandbox Code Playgroud)
问题是 ReceiveCallback 永远不会被调用,尽管连接了套接字。
谁能帮我解决这个问题?