copyto(c# 里的copyto用法,求举例解释)

本文目录
- c# 里的copyto用法,求举例解释
- CopyTo具体怎么使用
- c# .net 使用stream 的copyto 方法无效
- C# copyto方法的问题
- opencv 图片拼接时 copyTo 失败
- 对c#中bitarray类的copyto()方法的疑问
c# 里的copyto用法,求举例解释
COPYTO 是哪方面的?
using System;
public class CopyToTest {
public static void Main() {
// Embed an array of characters in a string
string strSource = “changed“;
char destination = { ’T’, ’h’, ’e’, ’ ’, ’i’, ’n’, ’i’, ’t’, ’i’, ’a’, ’l’, ’ ’,
’a’, ’r’, ’r’, ’a’, ’y’ };
// Print the char array
Console.WriteLine( destination );
// Embed the source string in the destination string
strSource.CopyTo ( 0, destination, 4, strSource.Length );
// Print the resulting array
Console.WriteLine( destination );
strSource = “A different string“;
// Embed only a section of the source string in the destination
strSource.CopyTo ( 2, destination, 3, 9 );
// Print the resulting array
Console.WriteLine( destination );
}
}
数组类的一般都是COPY到另一个目标,从哪个位置开始到哪个索引结束(就是可以选择复制一段) 到另一目标的哪个位置
CopyTo具体怎么使用
如果你就想复制一个字符串到另一个字符串,可以使用string的静态方法Copy
例如:
string a = “hello“;
string b = “world“;
b = string.Copy(a);
如果想使用CopyTo()这个方法的话是这样的
void CopyTo(
int sourceIndex,//从源字符串第几个字符开始copy,第一个为0
char destination,//目标字符串的char数组
int destinationIndex,//从目标字符串char数组的第几个位置开始放
int count//一共复制多少个字符
)
例如:
string dest = “Hello world“;
string source = “Goodbye China“;
char destArray = dest.ToCharArray();//将dest变成字符数组
source.CopyTo(8, destArray, 6, 5);//从source的第8个字符起复制5个字符并从destArray的第6个位置开始放
dest = new string(destArray);//这时dest为“Hello China“
c# .net 使用stream 的copyto 方法无效
首先:Stream.CopyTo要dotNet4.0以上才有。
当对文件操作,写入和复制时,你需要创建一个byte类型的buffer(因为涉及和磁盘交互)。你转换为数组就是相当于一个buffer. MemoryStream 实质上一个无法改变大小的字节数组的实例,这样造就了不能做为缓冲区使用,因而无法直接写入文件。【查看MSDN】
你可以重写CopyTo方法,达到你想要的结果。
实例代码如下:
public void CopyTo(Stream destination){
// 缓冲区默认大小
this.InternalCopyTo(destination, 81920);
}
private void InternalCopyTo(Stream destination, int bufferSize)
{
byte array = new byte[bufferSize];
int count;
while ((count = this.Read(array, 0, array.Length)) != 0)
{
destination.Write(array, 0, count);
}
}
C# copyto方法的问题
char word = new char;改成
char word = Enumerable.Repeat(’\0’, 10).ToArray();
opencv 图片拼接时 copyTo 失败
直接建立的mat img3,你把img3设置一下行列以及像素值呢;
cv::Mat ( rows, cols, type, cv::scalar );
对c#中bitarray类的copyto()方法的疑问
首先感慨一下很少看见这种问题,说明楼主是对喜欢思考本质的人。
先说一下,sbyte类型,范围-128 到 127,有符号 8 位整数。
这里的8位指的是内存中的,也就是二进制的位数。
比如,如果你存的是36,实际内存中存的是 0010 0100。
而BitArray存的是位数据,数组中每个元素代表一位,true为1,false为0。
在你的代码中,给BitArray初始化了5个位默认值为true,也就是形成了。
11111
===========================================================
1、先来解释一下为什么只有一个-1,剩下9个都是0
当你CopyTo的时候,由于arr的第一个元素arr是一个sbyte,其中含有8个位。
所以bit里的数据实际上全部赋到了arr里,并没有操作到后面的arr ~ arr。
所以arr ~ arr 保持了默认值0。
这也就是为什么后面始终都是9个0的原因。会变化的只有第一个。
2、接下来解释为什么会是-1
因为bit是位,arr是sbyte。
所以实际上程序将bit的每一位赋到了arr的每一位上去。
由于bit只有5位,而arr有8位,缺失的那3位自动补充了你给BitArray的初值。也就是形成了
1 1111
而1111 1111的二进制,表示有符号的十进制数的-1。(请参考二进制和十进制的转换)
所以就导致arr的值变成了-1。
你还可以做一个实验。若代码改成这样:
sbyte arr =new sbyte ;itArray bit = new BitArray(5,false) ;//默认值设为false,也就是0
bit.Set(0,true);//依次对5个位设为1
bit.Set(1,true);
bit.Set(2,true);
bit.Set(3,true);
bit.Set(4,true);
bit.CopyTo(arr,0);
则bit中依然是5位1
11111
按照道理来说,结果应该与原来一样,
但CopyTo到arr之后,你会发现arr的值变成了31 0 0 0 0 0 0 0 0 0
也就是arr变成了31。为什么呢?
因为系统将前面不够的3位补成了你的默认值0,变成了
1 1111
在二进制中,0001 1111表示的正是31。
3、总结
所以,程序没有出错,而且给你输出了以上的结果。这都是位赋值产生的。
至于你说的把sbyte换成int。我实测了以后发现结果并没有什么不同。
结果都是基于以上的过程产生的。
谢谢采纳,祝学习愉快。

更多文章:
易语言网页api接口怎么调用(易语言,怎么读取网页json的api)
2026年10月11日 08:00
majority of(the majority of 和 a majority of的区别以及用法例句)
2026年10月11日 07:40
another time(another time和other time的区别)
2026年10月11日 05:00








