【发布时间】:2013-11-15 11:40:02
【问题描述】:
在 C# 中处理以下情况的最佳方法是什么?
我有一个用 C/C++ 编写的服务器应用程序。
例如
它创建一个长度为256 的unsigned char 缓冲区。
在这个缓冲区中,服务器存储客户端发送给它的数据。存储后,对接收到的缓冲区进行一些密码学检查。
我正在用 C# 为这个服务器编写一个客户端。
问题是服务器期望的固定长度为 256 的缓冲区。
当我创建一个内容和总长度为 256 的 byte[] 数组时,密码检查失败。
我发现的原因很简单。服务器需要一个 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;
}
有没有更好的方法来处理这些艺术预期字节?我没有看到重要的东西吗?
【问题讨论】:
-
基于这个answer来将一个字节数组初始化为某个值,而不是默认的null?我会说你的解决方案是一个很好的解决方案。
-
我会进一步概括并传入“空白”值,因此如果该值不是 204,您可以在不修改的情况下再次重复使用。