我想創建一個字節[]給出一些未知數量的字節。以下是一個示例:如何在C#中創建未知大小的字節[]?
ArrayList al = new ArrayList();
al.Add(0xCA);
al.Add(0x04);
byte[] test = (byte[])al.ToArray(typeof(byte));
我收到一個錯誤,指出數組中的一個或多個值無法轉換爲字節。我在這裏做錯了什麼?
感謝
我想創建一個字節[]給出一些未知數量的字節。以下是一個示例:如何在C#中創建未知大小的字節[]?
ArrayList al = new ArrayList();
al.Add(0xCA);
al.Add(0x04);
byte[] test = (byte[])al.ToArray(typeof(byte));
我收到一個錯誤,指出數組中的一個或多個值無法轉換爲字節。我在這裏做錯了什麼?
感謝
要麼使用一個通用的集合,而不是一個非泛型ArrayList
,或請確保您實際使用的字節。 0xCA是int
,而不是byte
。
ArrayList al = new ArrayList();
al.Add((byte)0xCA);
al.Add((byte)0x04);
byte[] test = (byte[])al.ToArray(typeof(byte));
嘗試List<byte>
然後使用ToArray的
.. al.Add會發生什麼(0xCA);與名單
不,通用列表只允許添加通用類型,如果它們足夠小,則0x數字可隱式轉換爲較低類型(比其默認Int32)。 – fbstj 2010-07-08 15:01:39
使用List<byte>
像下面。當你使用ArrayList,然後調用al.Add(0xCA)時,你實際上是在向ArrayList中添加int。
List<byte> al = new List<byte>();
...
啊,我以爲0x把它變成了一個字節。我的錯。 – FoppyOmega 2010-07-08 14:54:44
不,0x只是使它成爲一個十六進制整數,低於8位的任何0x數字都被認爲是一個Int32(但是如果數字的數目分別低於2/4,則隱含地可轉換爲字節/短) – fbstj 2010-07-08 14:59:59
使用ArrayList,您正在裝箱和拆箱字節對象可以產生顯着的性能影響。使用通用名單可防止發生拳擊並提供更好的表現。 –
2010-07-08 15:46:48