2011-07-08 70 views
0

我在下面的代碼讀取文件偏移量並將十六進制值寫入「MyGlobals.Hexbytes」變量....我怎樣才能將它寫入數組?C#將數據添加到數組?

非常感謝

MyGlobals.Mapsettings_filepath = "C:\\123.cfg"; 

///////////////////////////// Read in the selected ////////////// 

BinaryReader br = new BinaryReader(File.OpenRead(MyGlobals.Mapsettings_filepath), 
System.Text.Encoding.BigEndianUnicode); 

for (int a = 32; a <= 36; a++) 
{ 
    br.BaseStream.Position = a; 
    MyGlobals.Hexbytes += br.ReadByte().ToString("X2") + ","; 
} 
+0

很難說出你想要什麼。你想改變'MyGlobals.Hexbytes'嗎?你想要什麼類型的陣列?一個字節數組,字符串數組等?請編輯您的問題以添加此信息。 –

回答

1

MyGlobals.HexbytesList<string>不是那麼:

br.BaseStream.Position = a; 
MyGlobals.Hexbytes.Add(br.ReadByte().ToString("X2")); 

後來來顯示它,使用String.Join這樣的:

string myBytes = string.Join(",", MyGlobals.Hexbytes.ToArray()); 
1

數組的大小是固定結構,所以你不能添加元素。

如果你事先知道大小(因爲它似乎在你的例子),你可以實例化,然後添加元素,以預分配時隙:

例如

string[] byteStrings = new string[5]; // 36 - 32 + 1 = 5 

for (int a = 32; a <= 36; a++) 
{ 
    br.BaseStream.Position = a; 
    byteStrings[a - 32] = br.ReadByte().ToString("X2"); 
} 

但它更容易使用動態調整大小的採集,像List<T>

var byteStrings = new List<string>(); 
for (int a = 32; a <= 36; a++) 
{ 
    br.BaseStream.Position = a; 
    byteStrings.Add(br.ReadByte().ToString("X2")); 
} 
+0

感謝您的回覆......無論如何,我可以讀取4bytes而不是每次只讀取一個字節? – user826436

+0

@user,它有什麼不同? – svick

0

你應該首先定義數組的大小,因此你應該先設置其大小,然後填充它:

string[] array = new string[5]; 

for (int a = 32; a <= 36; a++) 
{ 
    br.BaseStream.Position = a; 
    array[a - 32] += br.ReadByte().ToString("X2"); 
} 

下面是如何讀取4個字節一次:

  BinaryReader reader = ....; 
... 
      byte[] buffer = new byte[4]; 
      reader.Read(buffer, 0, 4); 

... 
+0

@ user826436,我用代碼更新了我的答案,使用binaryreader讀取4個字節 – platon

0

假設MyGlobals.Hexbytes,這是有可能的,你可以留下你的代碼,它是這樣的,到最後補充一點:

var myarray = MyGlobals.Hexbytes.Split(','); 

myarray是字符串數組。