6

在 C# 中处理以下情况的最佳方法是什么?

我有一个用 C/C++ 编写的服务器应用程序。

例如,它创建一个unsigned char长度为的缓冲区256。在这个缓冲区中,服务器存储客户端发送给它的数据。存储后,对接收到的缓冲区进行一些密码学检查。

我正在用 C# 为这个服务器编写一个客户端。

问题是服务器期望的固定长度为 256 的缓冲区。

当我创建一个byte[]内容和总长度为 256 的数组时,密码检查失败。

我发现的原因很简单。服务器需要一个 256 字节长的缓冲区。例如,如果消息是"Hello World",则缓冲区的其余部分必须填充为 0。或者,更好地解释:字节需要是(unsigned) "204"or (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;
}

有没有更好的方法来处理这些艺术预期字节?我没有看到重要的东西吗?

4

2 回答 2

2

如果你不喜欢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;
}

但从概念上讲,它是相同的,只是看起来(可以说)更好一点。

于 2013-11-04T18:51:23.750 回答
1

您可以将整个数组“memset”为所需的填充字符,然后插入实际数据吗?

于 2013-11-04T18:49:55.543 回答