在C#中处理以下情况的最佳方法是什么?
我有一个用C/C++编写的服务器应用程序.
例如,它创建一个unsigned char长度缓冲区256.在此缓冲区中,服务器存储客户端发送给它的数据.存储后,对接收的缓冲区进行一些加密检查.
我正在用C#为这台服务器编写一个客户端.
问题是服务器期望固定长度为256的缓冲区.
当我创建一个byte[]内容和总长度为256的数组时,加密检查失败.
我发现的原因很简单.服务器需要256字节长的缓冲区.例如,如果消息是"Hello World",则缓冲区的其余部分必须为0填充.或者,更好地解释:字节需要(unsigned) "204"或 (signed) "-52".
我认为这是一个C/C++概念问题.
为了解决我的问题,我明确地设置了该值.
public static byte[] GetCBuffer(this byte[] data, int len)
{
byte[] tmp = new byte[len];
for(int i = 0; i < len; i++)
if(i < data.Length)
tmp[i] = data[i];
else
tmp[i] = 204;
return tmp;
}
Run Code Online (Sandbox Code Playgroud)
是否有更好的方法来处理这些艺术预期的字节?我没有看到必要的东西吗?
如果你不喜欢if你的代码,你可以尝试 LINQ:
public static byte[] GetCBuffer(this byte[] data, int len)
{
byte[] tmp = Enumerable.Repeat((byte)204, len).ToArray();
for(int i = 0; i < data.Length; i++)
{
tmp[i] = data[i];
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
但从概念上讲,它是相同的,只是看起来(可以说)更好一点。