0

オフセットと文字列を持つ構造を含むバイナリ データのチャンクがあります。C++ では簡単です。

struct foo
{
 int offset;
 char * s;
}

void * data; 
... data is read and set
foo * header = (foo*) data;
header->s = (int)header-> + (int)data;
int len = strlen(header->s);
char* ns = new char[len+1];
strcpy(ns,header->s);

簡単です... C#でこれを行うにはどうすればよいですか? 最大の問題は、紐の長さが分からないことです。null で終了します。

私はbyte[]メモリにデータと IntPtr を持っていますが、そのデータへのポインターが必要です aa string ( char *) 文字列の長さを取得できるもの。

4

1 に答える 1

-1

C# は高水準言語であり、ポインターを操作することは、この言語にとって単純に不自然です。

BitConverterデータをバイト配列から文字列に変換するには、次のクラスを使用できます。

BitConverter.ToInt32(byte_array, start index);

StringBuilder文字列に変換するには、次のクラスを使用できます。

StringBuilder str = new StringBuilder();
// i=starting index of text
for (int i = 3; i<byte_array.Length; i++)
  str.Append(byte_array[i];

return str.ToString();

文字列の後にさらにデータがある場合は、ループの停止条件を入れることができ、停止するbyte_array[i]!=0byte_array[i]文字列ターミネータになります。の値を保存するとi、その後のデータを取得できます。

これを行う別の方法は、次のASCIIEncoding.ASCII.GetString()メソッドを使用することです。

ASCIIEncoding.ASCII.GetString(byte_array, start_index, bytes_count);
于 2012-06-28T16:35:43.780 に答える