表示 datagridview 中的字节数组

Posted

技术标签:

【中文标题】表示 datagridview 中的字节数组【英文标题】:represent array of byte in datagridview 【发布时间】:2013-12-26 06:40:47 【问题描述】:

我在 C# 中有一个字节数组:

 byte[] bmp = File.ReadAllBytes("D:\\x.bmp");

我想在DataGridView 中表示如下(三列 - 第一列偏移量,第二列 sizebyte,第三列描述,行是来自x.bmp 的字节数组的元素):

0          2               signature
2          4                size BMP
6          2                reserved
8          2                reserved
10         4                offset start image
14         4                must 40
18         4                 width
22         4                 height
26         2                 must 1

我可以在 C# 中使用DataGridView 以这种方式表示字节数组吗?

【问题讨论】:

【参考方案1】:

这段代码怎么样?

您不需要读取 BMP 文件的所有字节。

public partial class Form1 : Form

    public Form1()
    
        InitializeComponent();
    

    private void Form1_Load(object sender, EventArgs e)
    
        UpdateDataGridView();
    

    private void UpdateDataGridView()
    
        byte[] bmp = new byte[28];
        List<BMPInfo> InfoList = new List<BMPInfo>();

        using (var fs = new FileStream("D:\\x.bmp", FileMode.Open, FileAccess.Read))
        
            fs.Read(bmp, 0, bmp.Length);
        

        InfoList.Add(new BMPInfo
        
            Offset = BitConverter.ToInt32(bmp, 10),
            Size = BitConverter.ToInt32(bmp, 2),
            Description = "Something"
        );
        dataGridView1.DataSource = InfoList;
    


public class BMPInfo

    public long Offset  get; set; 
    public long Size  get; set; 
    public string Description  get; set;

【讨论】:

【参考方案2】:

我不是winform 人,所以我不知道如何使用DataGridView。 但我以某种方式能够做到这一点:

这只是给你一个想法。

private void Form1_Load(object sender, EventArgs e)
        
            byte[] offset =  0, 2, 6, 8, 10, 14, 18, 22, 26 ;
            byte[] sizebyte =  4, 2, 2, 4, 4, 4, 4, 2 ;
            string[] description =  "signature", "size BMP", "reserved", "reserved", "offset start image", "must 40", "width", "height" ;

            this.dataGridView1.Columns.Add("offset", "offset");
            this.dataGridView1.Columns.Add("sizebyte", "sizebyte");
            this.dataGridView1.Columns.Add("description", "description");
            int i = offset.Length;


                for (int j = 0; j < i; j++)
                
                    DataGridViewRow row = new DataGridViewRow();
                    row.CreateCells(dataGridView1);
                    row.Cells[0].Value = offset.GetValue(j).ToString();
                    if(j<sizebyte.Length)
                    row.Cells[1].Value = sizebyte.GetValue(j).ToString();
                    if (j < description.Count())
                    row.Cells[2].Value = description.GetValue(j).ToString();
                    dataGridView1.Rows.Add(row);
                



        

我知道代码并不完美。但我可以用这个填充我的 dataGridView。

【讨论】:

以上是关于表示 datagridview 中的字节数组的主要内容,如果未能解决你的问题,请参考以下文章

怎么删除datagridview中选中的行啊

如何取消选择 DataGridView 控件中的所有选定行?

Datagridview编辑/保存按钮

将表示 UCHAR 数组的 json 字符串响应转换为字节数组

C#中的DataGridViews数组

如何遍历 .dat 文件并将每组行的特定列附加到数组