所以字节可能是:
$ $ $ $ $ $ $我正在获得该缓冲区并将其转换为如下所示的字符串:
byte [] buffer = new byte [buffSize]; m_dataStream.Read(buffer,0,buffSize); String cmd = System.Text.Encoding.Unicode.GetString(buffer);我回来的是一个如下所示的字符串:
HELLO\0\0\0\0\0\0\0\0 ...如何告诉GetString在第一个Unicode null处终止字符串(即所以我刚回到HELLO)?
感谢任何输入。
解决方案如果你确定其余的都是\0,这将工作:
cmd = cmd.TrimEnd('\0');否则,如果您只想在第一个null之前获得所有内容:
int index = cmd.IndexOf('\0'); if(index> = 0) cmd = cmd.Remove(index);请注意, Unicode.GetString 将照顾的双\0s。你应该只找一个\0。
I have an array of bytes that I receive from an external entity. It is a fixed size. The bytes contain a unicode string, with 0 values to pad out the rest of the buffer:
So the bytes might be:
H \0 E \0 L \0 L \0 \0 \0 \0 \0 \0 ... etcI'm getting that buffer and converting it to a string like so:
byte[] buffer = new byte[buffSize]; m_dataStream.Read(buffer, 0, buffSize); String cmd = System.Text.Encoding.Unicode.GetString(buffer);What I get back is a string that looks like this:
"HELLO\0\0\0\0\0\0\0\0..."How can I tell GetString to terminate the string at the first Unicode null (ie so I just get back "HELLO")?
Thanks for any input.
解决方案If you're sure the rest is all \0, this would work:
cmd = cmd.TrimEnd('\0');Otherwise, if you just want to get everything before the first null:
int index = cmd.IndexOf('\0'); if (index >= 0) cmd = cmd.Remove(index);Note that Unicode.GetString will take care of double \0s. You should just look for a single \0.
更多推荐
从System.Text.Encoding.Unicode.GetString获取空终止的字符串
发布评论