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. 将参数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;
  1. 删除 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;