首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将byte[,]转换为byte[]

将byte[,]转换为byte[]
EN

Stack Overflow用户
提问于 2011-01-13 05:45:30
回答 4查看 887关注 0票数 1

有没有人知道一种有效的方法来将C#中的2d数组(非锯齿)展平为1d,然后再将其展平。我知道在后端C#必须将其作为一维数组持有,如果可能的话,我只想获得后端一维数组的句柄。

我之所以想这样做是因为我希望能够在托管代码中将其作为2d,有时我想将其作为1d导入非托管dll代码(数字图像处理中的优化汇编就是一个很好的例子)。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-01-13 05:51:25

您无法从byte[,]获取托管byte[]数组,除非将其复制出来(至少我不知道是这样)。

如果你对unsafe代码感到满意,你可以在数组上修复一个byte*,我相信这应该是可行的:

代码语言:javascript
复制
fixed (byte* ptr = array)
{
    for (int i = 0; i < N; ++i)
    {
        byte b = ptr[i];
        // Do whatever you need.
    }
}
票数 3
EN

Stack Overflow用户

发布于 2011-01-13 05:49:31

嗯,对象本身不是byte[],尽管它在一个连续的内存块中获得了数据本身。不要忘记,数组也知道它的秩和长度等。

但是,您可以使用Buffer.BlockCopy快速复制阵列。例如:

代码语言:javascript
复制
byte[,] source = new byte[5,5];
byte[] dest = new byte[source.Length];
Buffer.BlockCopy(source, 0, dest, 0, source.Length);

请注意,最后一个参数是字节数,而不是数组元素的数量。

票数 11
EN

Stack Overflow用户

发布于 2011-01-13 05:48:24

要从2D索引转到1D索引,请执行以下操作:

代码语言:javascript
复制
int i = y * width + x;

来回:

代码语言:javascript
复制
int x = i % width;
int y = i / width;

然后,最简单的方法就是遍历数组,逐个复制值。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4674394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档