怎样将short[]数组转换成byte[]数组

cafecai 2006-04-29 09:13:47
怎样将short[]数组转换成byte[]数组
...全文
1386 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
losedxyz 2006-04-30
  • 打赏
  • 举报
回复
mark
cafecai 2006-04-29
  • 打赏
  • 举报
回复
dreadknightll(Dread Knight):
ToCharArray()是string类的方法
soaringbird 2006-04-29
  • 打赏
  • 举报
回复
或者
unsafe
{
fixed (short* ps = s)
{
System.Runtime.InteropServices.Marshal.Copy((IntPtr)ps, b, 0, 20);
}
}
soaringbird 2006-04-29
  • 打赏
  • 举报
回复
或者
unsafe
{
fixed (byte* pb = b)
{
System.Runtime.InteropServices.Marshal.Copy(s, 0, (IntPtr) pb, 10);

}
}
xiaomatian 2006-04-29
  • 打赏
  • 举报
回复
学习学习
soaringbird 2006-04-29
  • 打赏
  • 举报
回复
short[] s = new short[10];
byte[] b = new byte[20];
unsafe
{
fixed (short* ps = s)
{
byte* pb = (byte*)ps;
for (int i = 0; i < 20; i++,pb++)
{
b[i] = *pb;
}
}
}

或者
unsafe
{
fixed (byte* pb = b)
{
short* ps = (short*)pb;
for (int i = 0; i < 10; i++, ps++)
{
*ps = s[i];
}
}
}
Ivony 2006-04-29
  • 打赏
  • 举报
回复
不知道楼主要干什么。
这种事情在C++里面很简单,memcopy就成。
但C#里面的数组和C++里面的数组完全不是一个概念,有些东西应该要转变思维。
rx78gp01 2006-04-29
  • 打赏
  • 举报
回复
short[] bbb=new short[10];
......
byte[] ddd=(byte[])sht;
liujiwe79 2006-04-29
  • 打赏
  • 举报
回复
short[] arrshort = { 1, 2, 3, 4, 5 };
byte[] arrbyte = new byte[arrs.Length * 2];
for (int i = 0; i < arrs.Length; i++)
{
byte[] bi = System.BitConverter.GetBytes(arrs[i]);
arrb[2 * i] = bi[0];
arrb[2 * i + 1] = bi[1];
}
dreadknightll 2006-04-29
  • 打赏
  • 举报
回复
short [] sht;
……
byte [] byt;
byt=System.Text.Encoding.UTF8.GetByte(sht.ToCharArray());
viena 2006-04-29
  • 打赏
  • 举报
回复 1
short[] arrs = {1, 32767, -8, 4, 5};
int len=arrs.Length*2;
byte[] arrb=new byte[len];
for(int i=0;i<len;i+=2)
{
short tmp=arrs[i/2];
arrb[i]=(byte)(tmp>>8);
arrb[i+1]=(byte)(tmp&0x00FF);
}
Ninputer 2006-04-29
  • 打赏
  • 举报
回复
short[] arrs = { 1, 32767, -8, 4, 5 };
byte[] arrb = new byte[arrs.Length * 2];

for (int i = 0; i < arrs.Length; i++)
{
byte[] bi = System.BitConverter.GetBytes(arrs[i]);
arrb[2 * i] = bi[0];
arrb[2 * i + 1] = bi[1];
}
cafecai 2006-04-29
  • 打赏
  • 举报
回复
Ninputer(装配脑袋):

我用的是vs 2003,有能在2003用的方法吗?
cafecai 2006-04-29
  • 打赏
  • 举报
回复
viena() :
你的方法好像不行吧,short是16位的数据,arrb[i]=(byte)arrs[i];这样转换会有数据丢失。

例如short[16]转换成byte数组,那么byte数组的长度应该是32才对啊
Ninputer 2006-04-29
  • 打赏
  • 举报
回复
注意我贴的用法仅限C# 2.0
Ninputer 2006-04-29
  • 打赏
  • 举报
回复
byte[] t = Array.ConvertAll<short, byte>(arr, Convert.ToByte);

arr就是那个Short数组
guodawu 2006-04-29
  • 打赏
  • 举报
回复
Study!!!
viena 2006-04-29
  • 打赏
  • 举报
回复
short[] arrs = {1,2,3,4,5};
byte[] arrb=new byte[arrs.Length];
for(int i=0;i<arrs.Length;i++)
{
arrb[i]=(byte)arrs[i];
}
itmingong 2006-04-29
  • 打赏
  • 举报
回复
mark
soaringbird 2006-04-29
  • 打赏
  • 举报
回复
对,Buffer.BlockCopy更简单
加载更多回复(3)

110,545

社区成员

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

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

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