| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4932 人关注过本帖
标题:[求助]Array.Copy(string,char[],string.Length)
取消只看楼主 加入收藏
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
 问题点数:0 回复次数:8 
[求助]Array.Copy(string,char[],string.Length)

string[] strSource=new string[2];
strSource[0]= "chanqwer";

strSource[0] = strSource[0].PadLeft(16);
char[] temp = new char[16];
Console.WriteLine(strSource[0]);

Console.WriteLine(strSource[0].Length);
Array.Copy(strSource, temp, 16);
Console.WriteLine(temp);

使用Array。Copy函数从string复制到char[] 字符串数组的时候,编译通过。但是运行的时候报错:
源数组长度不足。请检查 srcIndex 和长度以及数组的下限。
不知道为什么。


如果改成:
string strSource;
strSource="chanqwer";

strSource= strSource.PadLeft(16);
char[] temp = new char[16];
Console.WriteLine(strSource);

Console.WriteLine(strSource.Length);
Array.Copy(strSource, temp, 16);
Console.WriteLine(temp);

编译的时候出现:
错误 2 与“System.Array.Copy(System.Array, System.Array, int)”最匹配的重载方法具有一些无效参数 C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\waitone\waitone\Form1.cs 16 9 waitone
错误 3 参数“1”: 无法从“string”转换为“System.Array” C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\waitone\waitone\Form1.cs 16 20 waitone


请各位指点一下怎么回事。

搜索更多相关主题的帖子: string Array Length Copy char 
2006-08-25 10:32
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
string strSource;
strSource="chanqwer";

strSource= strSource.PadLeft(16);
char[] temp = new char[16];
Console.WriteLine(strSource); Console.WriteLine(strSource.Length);
Array.Copy(strSource, temp, 16);
Console.WriteLine(temp);
即使我使用Array.Copy((System。Array)strSource,(System。Array) temp, 16);
来转换数组也不行,系统无法进行类型转换啊。
错误 2 无法将类型“string”转换为“System.Array” C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\waitone\waitone\Form1.cs 16 20 waitone


所以我才使用string[]类型数组。结果还是有问题。
那怎么办才可以运行呢?



2006-08-25 11:50
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
Array.Copy(strSource.ToCharArray (), temp, 16);
可是如果这样字写的话,等于提前把 string的类型转换为char[] 数组了。
实际上也就不用再进行数组的转换了啊。

如果使用不同类型的数组之间进行copy呢?
比如 char 和 int型的?


2006-08-28 08:22
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
如果那样子的话估计是可行的,但是方法似乎比较麻烦。
而且,Array。copy的目的不就是在不同类型之间的数组之间复制吗?
那它岂不是没有起到应有的作用?

如果拷贝 string to char[],要使用 string。tochararray实际上string已经变成char[]的数组了,也就不需要array。copy的功用了。

如果 转换int[] 到 char[] 使用一个一个的强制转换,要使元素比较多呢?

2006-08-28 08:50
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
无语.....

我的意思是想弄清楚Array.copy的功能,以后有机会可以用.
象上述所说的"

Array.Copy(strSource.ToCharArray (), temp, 16);

实际上就是把strSource.已经转换为char[]数组了,然后进行char[]数组之间的复制,这样我觉得就可以直接 char[] c1=char[] c2;了,不需要用array.copy函数.它也就没有起到应有的作用.(我认为的作用是可以通过某种方式让 string 的类型直接被拷贝到char[]中间去.)

""
强制转换的话,应该可以实现int[]到char[]的转换,但是同样没有用到array.copy的功能.


我只是想好好使用array.copy功能.因为 不是很了解,想看看是否可以实现这样字的转换.


汗 ....
可能我没有表达清楚,或者是这个问题比较.....
因为有 string.tochararray()的函数,实际上暂时是不需要用到array.copy的.


汗....

无论如何,感谢各位的帮助.如果万一有直接拷贝的方法,请一定贴出来.

Thanks very much....



2006-08-28 10:46
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
以下是引用月夜枫华在2006-8-28 11:55:13的发言:

楼主对引用类型和值类型还是区分不清,char[] c1=c2之后,对c1和c2任何的修改都会改变原始数据,执行过Array.copy后才会复制的。
而且字符串在C#中已经不是字符数组了,不可以直接Copy的。
如果源地址和目标地址为整型和字符(或其他类型的)进行复制,可以使用ArrayList进行存储。或使用object[]
原因很简单,char[]中每个元素1字节,不可能装得下int[]中的元素!

版主所说的我承认,但是,我的初衷是使用Array.copy函数。
msdn上的相关例子是这样定义的:Array myIntArray=Array.CreateInstance( typeof(System.Int32), 5 );
Array myObjArray = Array.CreateInstance( typeof(System.Object), 5 );
Array.Copy( myIntArray, myIntArray.GetLowerBound(0), myObjArray, myObjArray.GetLowerBound(0), 1 );

这个是使用array。copy 从int拷贝至obj数组。 我的理解是 obj数组对copy方法要求没有限制,应该不会有类型转换的问题。
我想请教一下 有没有直接在不同类型数组中copy的方法,例如使用array。copy函数。
并且不是使用 Array myObjArray = Array.CreateInstance( typeof(System.Object), 5 ); 这样定义数组的方法。
数组:int[] i=new int[3];这样的定义的数组之间是否可以 copy?
如果说char[]的元素比较小 ,那么从char[]copy至int[]数组呢?
编译的时候主要是数组类型的问题。
使用array 。copy


2006-08-28 14:33
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
以下是引用chenjin145在2006-8-28 14:39:39的发言:

基本上能夠隱試轉換的
完全可以array.copy


array。copy的时候报类型转换有问题,不知道怎么改?
有没有代码贴一下 ?谢谢。
不是
string s=“asdfa”s.padleft(16)
char[16] ch
array,copy(s,ch,16)
这样字的,如果是
array,copy(s.tochararray(),ch,16)
就不用了,因为 源数组已经是char[]的数组了,不是我所理解的不同类型数组之间的转换使用array。copy()。

主要是想看能不能直接转换的数组类型。

谢谢。。。


2006-08-28 14:44
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
以下是引用月夜枫华在2006-8-28 14:39:51的发言:

由于object数组的元素可以接受所有的数据类型,所以可以把object数组最为目的接收者,我这里没有运行环境,你可以试着把short数组赋给int数组,由于char[]是字符类型,所以和整型直接赋值可能会出错。

谢谢,不过现在是编译的时候就有问题。
因为array。copy要求system.array类型的数组,
编译提示说数组类型不符合。


2006-08-28 14:46
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
以下是引用chenjin145在2006-8-28 14:47:08的发言:
byte->short
byte->int
byte->double
char->byte
char->int
char->double
應該都可以
string其實是引用類型 無法隱式轉換

char-byte似乎不行,长度好像不够。

“string其實是引用類型 無法隱式轉換”那你的意思应该是说string 是无法用array。copy这个函数进行复制转换的是吧。

谢谢你了。。。


2006-08-28 15:16
快速回复:[求助]Array.Copy(string,char[],string.Length)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017545 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved