关于byte[]有效数组长度的问题
比如 byte[] buff = new byte[100];
buff = Encodeing.Default.GetBytes( "abc ");
所以实际有效长度是 3,那么怎么得到这个有效长度.
不能把 abc 赋值给一个变量判断那变量的.
本来我想这样
for (int i = 0; i < buff.Length; i++)
{
if (i <= 25) continue;
if (buff[i] == 0x00)
{
length = i;
break;
}
}
一般情况下,这样可以,但是
因为中间 buff 又其他值,比如一个 整型值 转换为 4位的字节
高位有时候就有 0x00,
所以这样就不能判断了.也不能用循环 i=buff.Length;i> 0;i--判断最后一个有效值,这样效率不行.大家帮我想想办法.谢谢了
------解决方案--------------------byte[] bytes = new byte[200];
private void button1_Click(object sender, EventArgs e)
{
bytes = System.Text.Encoding.Default.GetBytes(textBox1.Text.Trim());
MessageBox.Show(bytes.Length.ToString());
}
------解决方案--------------------using System;
using System.Text;
class Program
{
static void Main(string[] args)
{
byte[] buff = new byte[100];
buff = Encoding.Default.GetBytes( "abc ");//Encoding不是Encodeing
Console.WriteLine(buff.GetLength(0));
}
}
------解决方案--------------------改为MessageBox.Show(a.GetLength(0).ToString());
------解决方案--------------------不管buff初始定义大小为多少,当调用buff = Encodeing.Default.GetBytes( "abc ");那么buff都被赋值为GetBytes方法返回的数组(不是copy),相当于重定义了buff,所以不用与判断buff的有效字节.
------解决方案--------------------Encodeing.Default.GetBytes( "abc ");是没问题,返回的是新实例.
------解决方案--------------------@caizhenfang(几路)
你可以返回后再通过Array.Copy或实例方法CopyTo复制到你定义的Buf中。
比如byte[] buff = new byte[100];
Encoding.Default.GetBytes( "abc ").CopyTo(buff, 0);
但是上面的语句不到返回的长度。
最好是有一个临时数组:
byte[] buf = Encoding.Default.GetBytes( "abc ");
buf.CopyTo(buff, 0);
后面的再追加时可以根据buf的长度设置相应的位置。
------解决方案--------------------关注,没用过。