簡體   English   中英

如何在C#中將sbyte []轉換為byte []?

[英]How to convert a sbyte[] to byte[] in C#?

我有一個函數填充sbyte []類型的數組,我需要將此數組傳遞給另一個接受byte []類型參數的函數。

我可以很好地快速轉換它,而無需復制所有數據或使用unsafe魔法嗎?

是的你可以。 由於bytesbyte都具有相同的二進制表示,因此無需復制數據。 只需對Array進行強制轉換,然后將其轉換為byte[]即可。

sbyte[] signed = { -2, -1, 0, 1, 2 };
byte[] unsigned = (byte[]) (Array)signed; 

你將不得不復制數據(只有參考類型的數組是協變的) - 但我們可以嘗試有效地做到這一點; Buffer.BlockCopy似乎有效:

    sbyte[] signed = { -2, -1, 0, 1, 2 };
    byte[] unsigned = new byte[signed.Length];
    Buffer.BlockCopy(signed, 0, unsigned, 0, signed.Length);

如果它是引用類型,則只需轉換引用而不復制數組:

    Foo[] arr = { new Foo(), new Foo() };
    IFoo[] iarr = (IFoo[])arr;
    Console.WriteLine(ReferenceEquals(arr, iarr)); // true

如果您使用的是.NET 3.5+,則可以使用以下命令:

byte[] dest = Array.ConvertAll(sbyteArray, (a) => (byte)a);

也就是說,我猜有效地復制了所有數據。

請注意,此功能也在.NET 2.0中,但您必須使用匿名方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM