【发布时间】:2015-07-25 00:43:20
【问题描述】:
将字节数组转换为字符串时,我正在使用类似的东西
byte[] src = new byte[5] { 65, 66, 67, 0, 0 };
string s = System.Text.Encoding.Default.GetString(src);
(另见此处:How to convert byte[] to string?)
但是,如果字节数组在某些位置包含 0 值(例如,在末尾,因为预期的字符串不够长),则生成的字符串也包含 '\0' 字符。他们甚至计算 string.Length。上例结果为“ABC\0\0”,长度为5。
这样的字符串是可打印的,但 Console.Writeline 似乎在这样的字符串之后出现换行问题。由于“隐藏”“\0”字符(“ABC”!=“ABC\0\0”),将此字符串与“真实”字符串进行比较可能会产生意想不到的结果。
由于我目前仅将其用于调试输出,因此我的解决方法是 Trim() 尾随 '\0' 字符。有没有更好的方法来摆脱这种情况,也许是不同的编码器或不同的转换方法?
【问题讨论】:
-
只要简单地追加
.TrimEnd('\0') -
是的,我已经说过了。它不适用于字符串中的 \0。
标签: c# .net string character-encoding bytearray