如何将此方法从C++转换为C#

本文关键字:转换 C++ 此方法 | 更新日期: 2023-09-27 17:59:19

有人能解释一下我是如何将其写入C#的吗?

//byte[] buffer is priavte in the class
//it's for writing Packets (gameserver)
void writeString(int location, std::string value, int length) {
    if (value.length() < length) {
        memcpy(&buffer[location], value.c_str(), value.length());
        memset(&buffer[location+value.length()], 0, length-value.length());
    }
    else memcpy(&buffer[location], value.c_str(), length);
}

如何将此方法从C++转换为C#

您的问题的确切答案是这样的。这是C#类中的一个私有方法(为了清楚起见,我还添加了缓冲区字节数组):

    byte[] buffer;
    private void writeString(int location, string value, int length)
    {
        System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
        if (value.Length < length)
        {
            Array.Copy(encoding.GetBytes(value), 0, buffer, location, value.Length);
            Array.Clear(buffer, location, length - value.Length);
        }
        else Array.Copy(encoding.GetBytes(value), 0, buffer, location, length);
    }

C++到C#的迁移指针:

  1. memset为零类似于Array.Clear
  2. memcpy首先获取目标,而Array.Copy首先获取源
  3. string.Length是一个属性,而不是std::string.Length()中的方法

检查缓冲区.BlockCopy

msdn链接

脑海中浮现出

ASCIIEncoding.GetBytes。它将字符串作为参数,并返回包含字符串的byte[]缓冲区。

您是否试图将二进制数据写入流、文件或类似文件?如果是这样,您可能最好使用BinaryWriter,因为它本身支持序列化字符串(以及其他类型)。

使用类似的方法将字符串转换为字节数组,然后使用for循环将这些字节放入作为消息缓冲区的字节数组中,并在必要时填充零

// C# to convert a string to a byte array.
public static byte[] StrToByteArray(string str)
{
    System.Text.UTF8Encoding  encoding=new System.Text.UTF8Encoding();
    return encoding.GetBytes(str);
}