System.Text.Encoding.Default.GetString()后面无法再添加字符
项目场景:
使用 System.Text.Encoding.Default.GetString (参数1)时,传入的参数1未填满空间大小,后面仍需添加字符串或字符。
问题描述
当参数1未填满空间, System.Text.Encoding.Default.GetString (参数1)后面添加任意字符都不生效,如:
byte[] temp = new byte[7];
temp[0] = (byte)'a';
temp[1] = (byte)'b';
temp[2] = (byte)'c';
temp[3] = (byte)'A';
temp[4] = (byte)'B';
temp[5] = (byte)'C';
string anyStr = "任意字符";
string result = System.Text.Encoding.Default.GetString(temp) + anyStr;
结构 result 的输出都不包含字符串 anyStr 。
原因分析:
当 temp 设置的长度且未填满时, System.Text.Encoding.Default.GetString() 会在生成的字符串之后添加 “\0” 结束符,此时再添加任何字符串或者字符都是无效的。
解决方案:
总结了以下几个方法:
- 将参数1 temp 的长度全部填满
byte[] temp = new byte[6];
temp[0] = (byte)'a';
temp[1] = (byte)'b';
temp[2] = (byte)'c';
temp[3] = (byte)'A';
temp[4] = (byte)'B';
temp[5] = (byte)'C';
string anyStr = "任意字符";
string result = System.Text.Encoding.Default.GetString(temp) + anyStr;
- 删除 System.Text.Encoding.Default.GetString() 产生的 “\0” 结束符
byte[] temp = new byte[7];
temp[0] = (byte)'a';
temp[1] = (byte)'b';
temp[2] = (byte)'c';
temp[3] = (byte)'A';
temp[4] = (byte)'B';
temp[5] = (byte)'C';
string anyStr = "任意字符";
string result = System.Text.Encoding.Default.GetString(temp).Replace("\0", "") + anyStr;
或
byte[] temp = new byte[7];
temp[0] = (byte)'a';
temp[1] = (byte)'b';
temp[2] = (byte)'c';
temp[3] = (byte)'A';
temp[4] = (byte)'B';
temp[5] = (byte)'C';
string anyStr = "任意字符";
string result = System.Text.Encoding.Default.GetString(temp).TrimEnd('\0') + anyStr;