200分寻找:byte[]和sbyte[]相互转化的最优方法!

chechy 2006-09-09 10:57:12
由于J#中默认的数据流类型通常是sbyte[],而C#的数据流类型通常是byte[]。它们本质是一样的,但是限于语法,两者不好直接转化,最笨的方法就是重新建一个数组,重新copy,如:
for (int i = 0; i < data.Length; i++)
{
sdata[i] = (sbyte)data[i];
}
如果可以直接转化,那就最好了。请问有没有直接转化的方法?如果能够提供,给200分,决不食言。
...全文
1241 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
chechy 2006-09-15
  • 打赏
  • 举报
回复
to viena(维也纳nn) : C#支持指针操作,只不过我一直坚持纯面相对象,所以一直没有使用这种代码而已,而且我也承认我对C#的指针不熟悉。但是,骨子里那种从C程序员继承下来的高效,使我想知道C#中这个该怎么弄。
to fd7893(看着办吧):谢谢你的答案,但是我觉得帮助不大。我犯不着为了那么简单的事情写那么多代码,而且,你的代码效率远远不及Buffer.BlockCopy。我个人认为,不是越烦琐就越好,能一句话写完的,我决不写两句,这是我当年对C的感悟。
fd7893 2006-09-15
  • 打赏
  • 举报
回复

我开始考虑用范型,但后来发现没有必要。

两种数据使用了都使用byte存储,可惜的是索引器不可以重载,不然使用起来就更方便了

byte性操作直接使用了索引器
sbyte型操作使用下面两个函数实现
sbyte GetSbyte(int i)//取第i个数据
void SetSbyte(int i, sbyte value)//给第i个数据赋值
不知道这样合不合Lz心意!
fd7893 2006-09-15
  • 打赏
  • 举报
回复
class myBytes
{
byte[] myValue;
public myBytes()
{
myValue = null;
}
public myBytes(int l)
{
myValue = new byte[l];
}

public int Length
{
get { return myValue.Length; }
}

public byte this[int i]
{
get { return myValue[i]; }
set { myValue[i] = value; }
}

public sbyte GetSbyte(int i)
{
return Convert.ToSByte(myValue[i]);
}
public void SetSbyte(int i, sbyte value)
{
myValue[i] = Convert.ToByte(value);
}
}

class Program
{
static void Main(string[] args)
{
myBytes b = new myBytes(25);
for (int i = 0; i < b.Length; i++)
b[i] = (byte)i;
for (int i = 0; i < b.Length;i++ )
Console.Write("{0,5}", b.GetSbyte(i));
Console.WriteLine();
Console.ReadLine();
}
viena 2006-09-15
  • 打赏
  • 举报
回复
能直接转化那就不叫C#了~
chechy 2006-09-15
  • 打赏
  • 举报
回复
to hdt(倦怠) :你试过吗?我试过,不行。而且,你这个效率应该不如Buffer.BlockCopy。
我期望出现,类似C中指针转化,有人知道吗?
真相重于对错 2006-09-14
  • 打赏
  • 举报
回复
Array.Copy( sbyte[] , byte[] ,...)
chechy 2006-09-14
  • 打赏
  • 举报
回复
to fd7893(看着办吧):我要的是sbyte[] 到 byte[]
失之毫厘,差之千里。
fd7893 2006-09-11
  • 打赏
  • 举报
回复
上面的是 byte -〉sbyte

还有Convert.ToByte(sbyte Value) 是sbyte-〉byte
fd7893 2006-09-11
  • 打赏
  • 举报
回复
Convert.ToSByte(byte Value)
chechy 2006-09-11
  • 打赏
  • 举报
回复
Buffer.BlockCopy我已经知道,我期望的是能否能像C中那样,简单的指针转换就可以出来。
阿牛138588 2006-09-10
  • 打赏
  • 举报
回复
不在同一种语言环境下,最快的话应该只能通过内存操作吧。。。
给个地址,长度,然后copy
alien54155415 2006-09-09
  • 打赏
  • 举报
回复
用Buffer.BlockCopy:
sbyte[] sdata= new sbyte[data.Length];
Buffer.BlockCopy(data, 0, sdata, 0, data.Length);

111,098

社区成员

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

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

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