C# - 转换 int 并将其放入具有偏移量的字节数组的最快方法
C# - Fastest way to convert an int and put it in a byte array with an offset
我正在编写自定义字节流,我想要尽可能快的 write/read 方法。这是我当前对 int32 的写入和读取方法的实现:
public void write(int value)
{
unchecked
{
bytes[index++] = (byte)(value);
bytes[index++] = (byte)(value >> 8);
bytes[index++] = (byte)(value >> 16);
bytes[index++] = (byte)(value >> 24);
}
}
public int readInt()
{
unchecked
{
return bytes[index++] |
(bytes[index++] << 8) |
(bytes[index++] << 16) |
(bytes[index++] << 24);
}
}
但我真正想要做的是将“int
”转换为字节指针(或类似的东西)并将内存复制到“bytes
”数组中“index
”为 offset
。 C#
有可能吗?
目标是:
避免创建新数组。
避免循环。
避免对“index
”变量进行多重赋值。
减少指令数量。
您的代码速度非常快,但您可以通过以下更改使它的速度更快(几乎快 2 倍):
bytes[index] = (byte)(value);
bytes[index+1] = (byte)(value >> 8);
bytes[index+2] = (byte)(value >> 16);
bytes[index+3] = (byte)(value >> 24);
index = index + 4;
unsafe
{
fixed (byte* pbytes = &bytes[index])
{
*(int*)pbytes = value;
value = *(int*)pbytes;
}
}
但要注意可能的数组索引溢出。
我正在编写自定义字节流,我想要尽可能快的 write/read 方法。这是我当前对 int32 的写入和读取方法的实现:
public void write(int value)
{
unchecked
{
bytes[index++] = (byte)(value);
bytes[index++] = (byte)(value >> 8);
bytes[index++] = (byte)(value >> 16);
bytes[index++] = (byte)(value >> 24);
}
}
public int readInt()
{
unchecked
{
return bytes[index++] |
(bytes[index++] << 8) |
(bytes[index++] << 16) |
(bytes[index++] << 24);
}
}
但我真正想要做的是将“int
”转换为字节指针(或类似的东西)并将内存复制到“bytes
”数组中“index
”为 offset
。 C#
有可能吗?
目标是:
避免创建新数组。
避免循环。
避免对“index
”变量进行多重赋值。
减少指令数量。
您的代码速度非常快,但您可以通过以下更改使它的速度更快(几乎快 2 倍):
bytes[index] = (byte)(value);
bytes[index+1] = (byte)(value >> 8);
bytes[index+2] = (byte)(value >> 16);
bytes[index+3] = (byte)(value >> 24);
index = index + 4;
unsafe
{
fixed (byte* pbytes = &bytes[index])
{
*(int*)pbytes = value;
value = *(int*)pbytes;
}
}
但要注意可能的数组索引溢出。