int[] 到字符串 C#

int[] to string c#

本文关键字:字符串 int      更新时间:2023-10-16

嗨,我正在用 C# 开发一个客户端应用程序,服务器是用 C++ 编写的

服务器使用:

inline void StrToInts(int *pInts, int Num, const char *pStr)
{
  int Index = 0;
  while(Num)
  {
    char aBuf[4] = {0,0,0,0};
    for(int c = 0; c < 4 && pStr[Index]; c++, Index++)
      aBuf[c] = pStr[Index];
    *pInts = ((aBuf[0]+128)<<24)|((aBuf[1]+128)<<16)|((aBuf[2]+128)<<8)|(aBuf[3]+128);
    pInts++;
    Num--;
  }
  // null terminate
  pInts[-1] &= 0xffffff00;
}

将字符串转换为 int[]

在我的 C# 客户端中,我收到:

int[4] { -14240, -12938, -16988, -8832 }

如何将数组转换回字符串?我不想使用不安全的代码(例如指针)我的任何尝试都会导致无法读取的字符串。

编辑:这是我的提议之一:

private string IntsToString(int[] ints)
{
  StringBuilder s = new StringBuilder();
  for (int i = 0; i < ints.Length; i++)
  {
    byte[] bytes = BitConverter.GetBytes(ints[i]);
    for (int j = 0; j < bytes.Length; j++)
      s.Append((char)(bytes[j] & 0x7F));
  }
  return s.ToString();
}

我知道我需要注意恩迪亚,但由于服务器在我的本地机器和服务器上运行,我认为这不是问题。
我的另一种尝试是使用具有显式布局的结构,并且对整数和字符使用相同的 FieldOffset 但这也不起作用。

也许可以尝试类似的东西(使用 LINQ):

int[] fromServer = { -14240, -12938, -16988, -8832, };
string reconstructedStr = new string(fromServer.SelectMany(BitConverter.GetBytes).Select(b => (char)(b - 128)).ToArray());

未经测试,但有一些东西可以开始。不知道128的减法是否正确。

您可以通过以下方式创建逗号分隔的字符串:

string str = String.Join(", ", intArray.Select(x => x.ToString()).ToArray());
    var ints = new[] {-14240, -12938, -16988, -8832};
    var result = string.Join("-", ints.Select(i => BitConverter.ToString(BitConverter.GetBytes(i))));
    Console.WriteLine(result); //60-C8-FF-FF-76-CD-FF-FF-A4-BD-FF-FF-80-DD-FF-FF

BitConverter.ToString可以在此处替换为其他内容,具体取决于您稍后将如何解析字符串。