2010-07-23 81 views
-2

如何在C#中將int [,]轉換爲byte []? 一些代碼可以理解的如何在C#中將int [,]轉換爲byte []#

編輯:

我需要一個函數來執行以下操作:

byte[] FuncName (int[,] Input) 
+3

這使得我的頭很難受。你需要指定更多的東西 - 更重要的是我甚至無法列出所有東西!讓我們從「你試圖解決什麼問題到底是什麼?」開始吧。 – 2010-07-23 21:26:12

+0

添加了一些更多的細節。 – mouthpiec 2010-07-23 21:31:02

+0

什麼是'[,] int'和'[] byte'應該是什麼意思?這在C#中不存在,你可能是指'int [,]'和'byte []'... – 2010-07-23 21:31:29

回答

3

由於你的問題中的細節很少,我只能猜測你想做什麼......假設你想「fla tten」 INTS的二維數組轉換成字節的一維數組,你可以做這樣的事情:

byte[] Flatten(int[,] input) 
{ 
    return input.Cast<int>().Select(i => (byte)i).ToArray(); 
} 

注意調用Cast:這是因爲多維數組實現IEnumerable但不IEnumerable<T>

3

這似乎是你錯了寫類型,但這裏是你可能會尋找for:

byte[] FuncName (int[,] input) 
{ 
    byte[] byteArray = new byte[input.Length]; 

    int idx = 0; 
    foreach (int v in input) { 
     byteArray[idx++] = (byte)v; 
    } 

    return byteArray; 
} 
+1

我會猜測「最有可能是他的目標」。 – 2010-07-23 21:36:11

+1

我的速度更快! – mquander 2010-07-23 21:36:43

+0

@mquander是真的,但我的似乎符合他的需求。 – 2010-07-23 21:57:02

1

的BitConverter轉換原始類型轉換爲字節數組:

byte[] myByteArray = System.BitConverter.GetBytes(myInt); 

您似乎想要將2維數組的整數轉換爲字節。將BitConverter與必要的循環結構(例如foreach)以及您想要組合數組維度的任何邏輯組合起來。

2

這裏的實現,假設你正在試圖序列化;不知道這是不是你想要的;它以尺寸爲前綴,然後使用基本編碼的每個單元格:

public byte[] Encode(int[,] input) 
{ 
    int d0 = input.GetLength(0), d1 = input.GetLength(1); 
    byte[] raw = new byte[((d0 * d1) + 2) * 4]; 
    Buffer.BlockCopy(BitConverter.GetBytes(d0), 0, raw, 0, 4); 
    Buffer.BlockCopy(BitConverter.GetBytes(d1), 0, raw, 4, 4); 
    int offset = 8; 
    for(int i0 = 0 ; i0 < d0 ; i0++) 
     for (int i1 = 0; i1 < d1; i1++) 
     { 
      Buffer.BlockCopy(BitConverter.GetBytes(input[i0,i1]), 0, 
        raw, offset, 4); 
      offset += 4; 
     } 
    return raw; 
} 
相關問題