我需要限制byte[]
使用 UTF-8 编码的输出长度。例如。byte[]
长度必须小于或等于1000
首先我写了以下代码
int maxValue = 1000;
if (text.Length > maxValue)
text = text.Substring(0, maxValue);
var textInBytes = Encoding.UTF8.GetBytes(text);
如果字符串仅使用 ASCII 字符,则效果很好,因为每个字符 1 个字节。但如果字符超出此范围,则每个字符可能是 2 或 3 甚至 6 个字节。这将是上面代码的问题。所以为了解决这个问题,我写了这个。
List<byte> textInBytesList = new List<byte>();
char[] textInChars = text.ToCharArray();
for (int a = 0; a < textInChars.Length; a++)
{
byte[] valueInBytes = Encoding.UTF8.GetBytes(textInChars, a, 1);
if ((textInBytesList.Count + valueInBytes.Length) > maxValue)
break;
textInBytesList.AddRange(valueInBytes);
}
我没有测试过代码,但我确信它会按我的意愿工作。但是,我不喜欢它的完成方式,有没有更好的方法来做到这一点?我错过了什么?还是不知道?
谢谢你。