C#byte []到String显示'\ 0'后不切

Pio*_*cki 4 c# string byte

我正在从内存中读取内容(在字节数组中),然后我想转换它,但结果类似于"wanteddata\0\0\0\0\0\0\0\0 ...".我怎样才能把它剪成"wantdata"?我不确定wantdata的大小,所以我给了最大尺寸:14.我从内存和转换中读取的方式:

        String w="";
        ReadProcessMemory(phandle, bAddr, buffer, 14, out bytesRW);
        w = ASCIIEncoding.ASCII.GetString(buffer);
Run Code Online (Sandbox Code Playgroud)

Nic*_*ler 9

据推测,你想删除所有字符,包括和第一个'\ 0'之后.Trim不会这样做.你需要做这样的事情:

int i = w.IndexOf( '\0' );
if ( i >= 0 ) w = w.Substring( 0, i );
Run Code Online (Sandbox Code Playgroud)


mor*_*rtb 5

如果数组确实是 ascii(每个字符一个字节),则可以通过在数组中搜索值 0 来找到 null

String w="";
ReadProcessMemory(phandle, bAddr, buffer, 14, out bytesRW);
int nullIdx = Array.IndexOf(buffer, (byte)0);
nullIdx = nullIdx >= 0 ? nullIdx : buffer.Length;
w = ASCIIEncoding.ASCII.GetString(buffer, 0, nullIndex);
Run Code Online (Sandbox Code Playgroud)

这种方法会在一定程度上优化代码,而不是创建包含多个“/0”的字符串