在c#中把int轉成byte一般都會使用bitconverter.getbytes可以獲取得到,但bitconverter有個問題就是每次呼叫都會產生乙個新byte;如果你比較執著的話以下提供兩種方式可以省下這一些。
從bitconverter中把**偷取出來,加功一下:),先看下bitconverter.getbytes關於int的方法
1public
unsafe
static
byte getbytes(int value)2 8
return array;
9 }
可以改成如下:
1public
class inttobytes2
2
11return m4bytedata;
12 }
13 }
還有一種是通過定義乙個結構
1public
class inttobytes1
2
14 [structlayout(layoutkind.explicit)]
15struct switcher
16
28 }
其實還有一種就是通過移位來實現,這裡就不多說。
簡單測試一下效果,建議編譯成release然後單獨執行exe看情況,如果不是結果可能有比較大的出入
1 inttobytes1 t1 = new inttobytes1();2 inttobytes2 t2 = new inttobytes2();
3 system.diagnostics.stopwatch sw = new system.diagnostics.stopwatch();
4 sw.reset();
5 sw.start();
6for (int i = 0; i < 9999999; i++)
7
10 sw.stop();
11 console.writeline(sw.elapsed.totalmilliseconds);
12 sw.reset();
13 sw.start();
14for (int i = 0; i < 9999999; i++)
15
19 sw.stop();
20 console.writeline(sw.elapsed.totalmilliseconds);
21 sw.reset();
22 sw.start();
23for (int i = 0; i < 9999999; i++)
24
28 sw.stop();
29 console.writeline(sw.elapsed.totalmilliseconds);
其實在.net framework裡不僅公是bitconverter存在這情況,在我們特別常用encoding.getbytes都是通過這方式來處理,還有string.tochararray等在高密集的處理時都會大量地構建新的byte和char.如果你比較關心這些細節不防多看下這些物件的方法,然後通過某些途勁把這些問題解決。這不僅僅能夠提高一點處理效率還能解放一些gc的工作。
byte 和int型的互轉
這種轉換有有意義的,比如可以將多個byte型的字段,轉換後放到乙個int欄位中。例如color的a,r,g,b值,就可以放到乙個int中,需要使用的時候,再從int轉換成byte陣列。它真正的意義還在於給我們提供了另一種儲存資料的思想,它比較類似於位圖儲存法。下面記錄下具體的實現方式。byte in...
string 轉int 的方法
首先感謝群裡一位兄弟老a,讓我更加熟悉了string 轉int 方法。廢話不多說,直接貼 背景 string liststring new string 方法1 迭代 int c new int liststring.length 09for int i 0 i liststring.length ...
C string轉int的方法
一 點睛 需要用到下面這一組函式。long int strtol const char nptr,char endptr,int base 將引數nptr字串根據引數base來轉換成有符號的整型 long long int strtoll const char nptr,char endptr,in...