c#
陣列、位元組陣列、轉換等
在system
命名空間裡面有許多跟
array
操作相關的類。
其中system.array
類裡面就提供了以下常用的方法:
binarysearch
:使用二進位制搜尋演算法在一維的排序
array
中搜尋值。
copy
:將乙個
array
的一部分元素複製到另乙個
array
中,並根據需要執行型別強制轉換和裝箱。
copyto
:將當前一維
array
的所有元素複製到指定的一維
array
中。resize
:將陣列的大小更改為指定的新大小。
sort
:對一維
array
物件中的元素進行排序。
與大多數類不同,
array
提供createinstance
方法,以便允許後期繫結訪問,而不是提供公共建構函式。
array.copy
方法不僅可在同一型別的陣列之間複製元素,而且可在不同型別的標準陣列之間複製元素;它
會自動處理強制型別轉換。有些方法,如
createinstance
copy
copyto
getvalue
和setvalue
,提供重
載(接受
位整數作為引數),以適應大容量陣列。
longlength
和getlonglength
返回指示陣列長度的
位整數。在執行需要對
array
進行排序的操作(如
binarysearch
)之前,必須對
array
進行排序。
arraylist
跟array
不同,前者是集合物件,
arraylist
的toarray
方法可以直接將
arraylist
裡面的全部元素
匯出到乙個陣列裡,而不需用迴圈逐個逐個元素地複製到乙個陣列。
toarray
的使用方法如下:
arraylist ay = new arraylist();
ay.add("sheep");
ay.add("cat");
ay.add("dog");
string al= (string)ay.toarray(typeof(string));
console.writeline(al[0]);
關鍵的地方在於
toarray
的引數,這裡應該用反射中的
typeof
獲取arraylist
裡面元素的原始資料型別。
在陣列中有一種比較特殊的:位元組陣列,即
byte
。記憶體、檔案中的資料都是以位元組陣列的形式儲存的,
如果程式需要對資料進行操作的話,或多或少都會使用到
byte
對於byte
跟其他型別的相互轉換問題,在
c++中,使用
memorycopy
函式即可完成,雖然在
c#裡面也有類
似memorycopy
的函式:
buffer.blockcopy
,但由於強型別的特性,在
c#裡它並實現不了位元組陣列跟其他類
型轉換的功能。
為了解決這個問題,
需要手工寫將其他型別的資料通過位運算和邏輯運算而得到位元組陣列。
如下面的**:
整型轉換為位元組陣列
int i = 1234567; //
對應的十六進製制是:
0012d687
byte db = new byte[4]; //int
為位元組(即
位)的整數
db[0] = (byte)(i & 0x000000ff); //
取第1,2
位db[1] = (byte)((i & 0x0000ff00) >> 8); //
取第3,4
位,並右移
位
位元組陣列 Byte
位元組 byte 發音 bait 位元組是通過網路傳輸資訊 或在硬碟或記憶體中儲存資訊 的單位。在ascii碼中,乙個英文本母 不分大小寫 佔乙個位元組的空間,乙個中文漢字佔兩個位元組的空間。符號 英文標點佔乙個位元組,中文標點佔兩個位元組。舉例 英文句號 佔1個位元組的大小,中文句號 佔2個位元組...
在VBS中定義位元組陣列Byte 介紹
晚上在 qq 上看到暱稱為 亂碼 的好友回答了搜搜問問裡乙個問題 在vbs中有辦法定義位元組陣列麼?在vbs中有辦法定義位元組陣列麼?就是位元組子型別陣列 vartype是8209的那種 注意不是vb!但是回答實在是不堪入目,連別人問什麼都沒搞懂,而且那人居然還滿意,真不知道他在想什麼。閒來沒事,我...
byte陣列轉blob型別 位元組陣列流詳解
bytearrayinputstream和bytearrayoutputstream經常用在需要流和陣列之間轉化的情況 說白了,fileinputstream是把檔案當做資料來源。bytearrayinputstream則是把記憶體中的 某個位元組陣列物件 當做資料來源。位元組陣列流只有位元組流,沒...