こんにちは、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 }
配列を文字列に変換するにはどうすればよいですか? 安全でないコード (ポインターなど) を使用したくない 私の試行のいずれかで文字列が読み取れなくなりました。
編集:これが私のアプローチの1つです:
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 を持つ構造体を使用することでしたが、どちらも機能しません。