2012-02-17 17 views
6

मैं सी # में एकल आयामी को 2dimensional सरणी परिवर्तित कर रहा हूँ। मुझे डिवाइस (सी ++) से 2 आयामी सरणी मिलती है और फिर मैं इसे सी # में 1 आयामी में परिवर्तित करता हूं।2 आयामी सरणी को सी # में एकल आयामी में परिवर्तित करना?

int iSize = Marshal.SizeOf(stTransactionLogInfo); //stTransactionLogInfo is a structure 
byte[,] bData = (byte[,])objTransLog; //objTransLog is 2 dimensionl array from device 
byte[] baData = new byte[iSize]; 

for (int i = 0; i < bData.GetLength(0); i++) 
{ 
    for (int j = 0; j < iSize; j++) 
    { 
     baData[j] = bData[i, j]; 
    } 
} 

मैं कोड से वांछित परिणाम मिलता है, लेकिन समस्या यह कार्यान्वयन के मानक तरीका नहीं है: यहाँ मेरी कोड है। मैं जानना चाहता हूं कि इसे मानक तरीके से कैसे किया जा सकता है। मार्शलिंग कर रहा है, मुझे यकीन नहीं है। अग्रिम धन्यवाद।

+1

तुम्हें क्या लगता है यह मानक तरीका नहीं है? मुझे यह ठीक लग रहा है। –

उत्तर

12

आप उपयोग कर सकते हैं Buffer.BlockCopy Method:

byte[,] bData = (byte[,])objTransLog; 

byte[] baData = new byte[bData.Length]; 

Buffer.BlockCopy(bData, 0, baData, 0, bData.Length); 

उदाहरण:

byte[,] bData = new byte[4, 3] 
{ 
    { 1, 2, 3 }, 
    { 4, 5, 6 }, 
    { 7, 8, 9 }, 
    { 10, 11, 12 } 
}; 

byte[] baData = new byte[bData.Length]; 

Buffer.BlockCopy(bData, 0, baData, 0, bData.Length); 

// baData == { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 } 
+0

यह मुझे वांछित परिणाम नहीं दे रहा है। बफर.ब्लॉककॉपी लूप के अंदर होगा? – user662285

+0

मैंने एक उदाहरण जोड़ा है। एक 'लूप' की आवश्यकता नहीं है। – dtb

+0

ठीक है.अब समस्या यह है कि यह सभी डेटा एक बार में कॉपी करेगा। लेकिन मैं अपने संरचना आकार के ब्लॉक में डेटा चाहता हूं (मान लीजिए आकार 270 है) क्योंकि मैं अपनी संरचना बनाने के लिए इस बाइनरी डेटा का उपयोग कर रहा हूं। संरचना में कई फ़ील्ड शामिल हैं जो डेटा से भरे हुए हैं और आखिरकार मैं इस डेटा को एक में दिखा रहा हूं ग्रिड, पंक्ति द्वारा पंक्ति। – user662285

4

सरलतम विधि

int iSize = Marshal.SizeOf(stTransactionLogInfo); //stTransactionLogInfo is a structure 
byte[,] bData = (byte[,])objTransLog; //objTransLog is 2 dimensionl array from device 
byte[] baData = bData.Cast<byte>().ToArray(); 
1

understend करने के लिए आसान और ग एक अलग भाषा के लिए ऑनवर।

// Create 2D array (20 rows x 20 columns) 
int row = 20; 
int column = 20; 
int [,] array2D = new int[row, column]; 

// paste into array2D by 20 elements 
int x = 0; // row 
int y = 0; // column 

for (int i = 0; i < my1DArray.Length; ++i) 
{ 
    my2DArray[x, y] = my1DArray[i]; 
    y++; 
    if (y == column) 
    { 
      y = 0;  // reset column 
      x++;  // next row 
    } 
} 
0

bData.Cast<byte>() एक भी आयाम को बहु-आयामी सरणी में परिवर्तित कर देंगे।

यह मुक्केबाजी करेंगे, तो unboxing सबसे शक्तिशाली तरीका नहीं है, लेकिन निश्चित रूप से सरल और सबसे सुरक्षित है।

संबंधित मुद्दे