关于byte[]有效数组长度的问题

三省Ta叔 2007-07-07 11:15:50
比如 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--判断最后一个有效值,这样效率不行.大家帮我想想办法.谢谢了
...全文
5405 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuda_1985 2007-07-09
  • 打赏
  • 举报
回复
关注,没用过。
GaoFX 2007-07-09
  • 打赏
  • 举报
回复
@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的长度设置相应的位置。
三省Ta叔 2007-07-09
  • 打赏
  • 举报
回复
大脑不好使了。。。 郁闷
三省Ta叔 2007-07-09
  • 打赏
  • 举报
回复
对,是没错
关键是,我不能这么直接赋值。
也就是说不能用 buff = Encodeing.Default.GetBytes("abc");
因为我还需要设置其他的 byte[] 的值放到 buff里。
比如 byte[] a = .. ; byte[] b=..; byte[] c = ..;
然后把 a , b ,c 都放到 buff里去。
三省Ta叔 2007-07-08
  • 打赏
  • 举报
回复
...
算我说错话了... 不好意思
但是这样达不倒目的啊
Avoid 2007-07-08
  • 打赏
  • 举报
回复
唉。。。好心招雷劈阿。。。
三省Ta叔 2007-07-08
  • 打赏
  • 举报
回复
Avoid(千金散尽还复来) 没明白意思就不要乱说
简单的这样 buff=.. 是取出了实际长度.
因为中间 buff 又其他值,比如一个 整型值 转换为 4位的字节
这样不可能用 buff= 那不覆盖了嘛
.只能CopeTo 或者 buff[i]=之类的
简单的赋值的话,我还找你来取长度.you病
waterine 2007-07-08
  • 打赏
  • 举报
回复

buff = Encodeing.Default.GetBytes("abc");
不需要之前调用初始化,这个方法返回是新的实例,也就是有效的数据。

这个说的对阿
bote_china 2007-07-08
  • 打赏
  • 举报
回复
不管buff初始定义大小为多少,当调用buff = Encodeing.Default.GetBytes("abc");那么buff都被赋值为GetBytes方法返回的数组(不是copy),相当于重定义了buff,所以不用与判断buff的有效字节.
Avoid 2007-07-08
  • 打赏
  • 举报
回复
受不了你了。。。
Avoid 2007-07-08
  • 打赏
  • 举报
回复
byte[] buff = new byte[100];
buff = Encodeing.Default.GetBytes("abc");
MessageBox.Show(buff.GetLength(0).ToString());

脑子锈逗了。。。受不了了。。。
三省Ta叔 2007-07-08
  • 打赏
  • 举报
回复
如果是简单的一个变量转换为字节那没必要这么麻烦了.
因为我要在塞完一个后取长度,然后再在这个有效长度后再塞值.
三省Ta叔 2007-07-08
  • 打赏
  • 举报
回复
上面说了值不只有1个,又很多.
所以必须在吧那些值塞完再取有效长度.
Avoid 2007-07-08
  • 打赏
  • 举报
回复
byte[] shit = new byte[100];

你什么都没塞进去,你想长度几?

你把abc塞进去,长度就是3
great_panda 2007-07-08
  • 打赏
  • 举报
回复
用ByteBuffer rs~~~~
int l=(int )rs.get(2);
搞定~~
zhgroup 2007-07-08
  • 打赏
  • 举报
回复
Encodeing.Default.GetBytes("abc");是没问题,返回的是新实例.
三省Ta叔 2007-07-07
  • 打赏
  • 举报
回复
那取的不是a 的长度了嘛
Avoid 2007-07-07
  • 打赏
  • 举报
回复
改为MessageBox.Show(a.GetLength(0).ToString());
三省Ta叔 2007-07-07
  • 打赏
  • 举报
回复
我是这样做的
三省Ta叔 2007-07-07
  • 打赏
  • 举报
回复
byte[] shit = new byte[100];
byte[] a = System.Text.Encoding.Default.GetBytes("abc");
byte[] b = int2bytes(2);

b.CopyTo(shit, 0);
a.CopyTo(shit, 4);



MessageBox.Show(shit.GetLength(0).ToString());


public static byte[] int2bytes(int num)
{
byte[] b = new byte[4];
int mask = 0xff;
for (int i = 0; i < 4; i++)
{
b[i] = (byte)(num >> (24 - i * 8));
}
return b;
}
加载更多回复(5)

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧