首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# byte[] to List<byte[]>

C# byte[] to List<byte[]>
EN

Stack Overflow用户
提问于 2011-02-10 00:58:17
回答 8查看 36.2K关注 0票数 2

我试图将一个byte[]数组'a‘放入一个列表'b’中,但它不起作用。假设我有这个字节数组'a‘。

代码语言:javascript
复制
12344
23425
34426
34533

我想把它放到一个4项(行数)的列表中,但这行不通。(设置中间byte[],然后添加它)

代码语言:javascript
复制
    byte[] a = {1,2,3,4,4,2,3,4,2,5,3,4,4,2,6,3,4,5,3,3};
    List<byte[]> b = new List<byte[]>();
    byte[] inter_byte= new byte[5];

    for (int u=0; u<4; u++)
    {
         for (int p=0; p<5; p++)
         {      
              inter_byte[u] = file[(5*u) + p];
         }
         b.Add(inter_byte);
    }

我得到的是一个4行长的列表,但它是最后一行。做这件事最好的方法是什么?

EN

回答 8

Stack Overflow用户

发布于 2011-02-10 01:01:44

您的字节数组是一个引用类型,这意味着在每个循环中更改它会更改存储的数据。在每个循环中声明它应该是有效的:

代码语言:javascript
复制
 byte[] a = {1,2,3,4,4,2,3,4,2,5,3,4,4,2,6,3,4,5,3,3};
 List<byte[]> b = new List<byte[]>();

 for (int u=0; u<4; u++)
 {
     byte[] inter_byte= new byte[5];
     for (int p=0; p<5; p++)
     {
         inter_byte[p] = a[(5*u) + p];
     }
     b.Add(inter_byte);
 }        
票数 6
EN

Stack Overflow用户

发布于 2011-02-10 01:00:53

您需要在每次迭代中重新分配inter_byte,否则它将被重用,您将替换行。

票数 5
EN

Stack Overflow用户

发布于 2011-02-10 01:26:07

像这样的东西应该就行了。(除非我误解了问题)

代码语言:javascript
复制
        List<byte[]> b = a.Select((by, i) => new { group = i / 5, value = by })
            .GroupBy(item => item.group)
            .Select(group => group.Select(v => v.value).ToArray())
            .ToList();

将字节分组为数组,每个数组5个,组成一个列表。

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

https://stackoverflow.com/questions/4948000

复制
相关文章

相似问题

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