C# 获取字节[]中索引后的字节
可能重复:C# 获取字节[]中索引后的字节,c#,bytearray,C#,Bytearray,可能重复: 基本上,我有一个字节[],它每次都会不同,但长度会相同 然后,在那之后,我有更多的字节和我需要的数据 如果这不合理,这基本上就是我的意思 "samebytesDataNeededIsHere" 所以我需要在“samebytes”之后获取数据,但我不知道该怎么做。我已经搜索过了,除了字节模式之外,这方面真的什么都没有,这不是我真正需要的。你还没有说你在用它做什么,但是在很多字节[]处理代码时,你会在缓冲区中使用偏移量。。。因此,不是最初将该偏移量设置为0,而是将其设置为“相同字节”
基本上,我有一个
字节[]
,它每次都会不同,但长度会相同
然后,在那之后,我有更多的字节和我需要的数据
如果这不合理,这基本上就是我的意思
"samebytesDataNeededIsHere"
所以我需要在“samebytes”之后获取数据,但我不知道该怎么做。我已经搜索过了,除了字节模式之外,这方面真的什么都没有,这不是我真正需要的。你还没有说你在用它做什么,但是在很多
字节[]
处理代码时,你会在缓冲区中使用偏移量。。。因此,不是最初将该偏移量设置为0
,而是将其设置为“相同字节”的长度
如果要在MemoryStream
中换行,只需将位置
设置为该数字,然后再使用它即可
最后,您可以使用指定起始偏移量的Buffer.BlockCopy
,将所需数据复制出来。这是我最不喜欢的选择,因为第二个缓冲区和块拷贝是多余的(我们已经有了数据,并且知道我们想要查看的位置)
示例:
// invent some initial data
byte[] data = Encoding.ASCII.GetBytes("samebytesDataNeededIsHere");
int fixedOffset = 9; // length of samebytes
// as a segment
ArraySegment<byte> segment = new ArraySegment<byte>(data,
fixedOffset, data.Length - fixedOffset);
// as a separate buffer
byte[] copy = new byte[data.Length - fixedOffset];
Buffer.BlockCopy(data, fixedOffset, copy, 0, copy.Length);
// as a stream
var ms = new MemoryStream(data, fixedOffset, data.Length - fixedOffset);
// or just directly
for(int i = fixedOffset ; i < data.Length ; i++) {
// access data[i]
}
//发明一些初始数据
byte[]data=Encoding.ASCII.GetBytes(“samebytesdatanedeshere”);
int fixedOffset=9;//相同字节的长度
//作为一部分
ArraySegment段=新的ArraySegment(数据,
fixedOffset,data.Length-fixedOffset);
//作为单独的缓冲区
byte[]copy=新字节[data.Length-fixedOffset];
块复制(数据,固定偏移,复制,0,复制.长度);
//如溪流
var ms=新内存流(data,fixedOffset,data.Length-fixedOffset);
//或者直接
for(inti=fixedOffset;i
我想您是在问如何从常量起始索引检索字节数组的一部分。有多种方法可以做到这一点
首先,一个简单的循环:
// make sure you use the correct encoding
// see http://msdn.microsoft.com/en-us/library/ds4kkd55.aspx
byte[] bytes = Encoding.UTF8.GetBytes( "samebytesDataNeededIsHere" );
for( int i = startIndex; i < bytes.Length; i++ ){
byte b = bytes[i]; // now do something with the value...
}
//确保使用正确的编码
//看http://msdn.microsoft.com/en-us/library/ds4kkd55.aspx
byte[]bytes=Encoding.UTF8.GetBytes(“samebytesdatanededishere”);
for(int i=startIndex;i
您还可以使用将一个数组的一部分复制到新数组中。当然,如果您要处理一个很大的数组,最好不要复制它,而是遍历它或将其作为流使用(正如@marcgravel所建议的那样)。怎么样
byte[] bytes = Encoding.UTF8.GetBytes("samebytesDataNeededIsHere");
byte[] bytesToUse = bytes.Skip(countOfBytesToSkip).ToArray();
一个字节就是一个字节,你说的长度是什么意思?你能重新思考一下你的问题吗?请发布一些示例代码来说明你的意思。对不起,我不明白你要的是什么。@0A0D这是一个字节数组。@MarcGravel我想他的意思是他想要原始的子数组。谢谢,我是用MemoryStream得到的。