如何将此方法从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#类中的一个私有方法(为了清楚起见,我还添加了缓冲区字节数组):
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#的迁移指针:
- memset为零类似于Array.Clear
- memcpy首先获取目标,而Array.Copy首先获取源
- 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);
}