byte 和int型的互轉

2021-09-06 06:16:43 字數 2194 閱讀 9454

這種轉換有有意義的,比如可以將多個byte型的字段,轉換後放到乙個int欄位中。例如color的a,r,g,b值,就可以放到乙個int中,需要使用的時候,再從int轉換成byte陣列。它真正的意義還在於給我們提供了另一種儲存資料的思想,它比較類似於位圖儲存法。下面記錄下具體的實現方式。

//

byte --> int

byte a = 254, r = 240, g = 230, b = 220

;

int color = a << 24 | r << 16 | g << 8 |b;

//int --> byte

byte a1 = (byte)(color >> 24

);

byte r1 = (byte)(color >> 16

);

byte g1 = (byte)(color >> 8

);

byte b1 = (byte)(color);

//

byte --> int

byte a = 254, r = 240, g = 230, b = 220

;

int color = bitconverter.toint32(new

byte , 0

);

//int --> byte

byte bytes =bitconverter.getbytes(color);

byte a1 = bytes[0

];

byte r1 = bytes[1

];

byte g1 = bytes[2

];

byte b1 = bytes[3];

unsafe

;

//byte --> int

fixed (byte* pb =bytes)

//int -->byte

byte* br = (byte*)&i;

byte a1 = *br;

byte r1 = *(br + 1

);

byte g1 = *(br + 2

);

byte b1 = *(br + 3

); }

使用指標,還要開啟編譯選項,允許不安全**。

byte a = 254, r = 240, g = 230, b = 220

;

byte bytes = new

byte

; intptr ptr = marshal.allochglobal(4

);

//從byte 到 int

marshal.copy(bytes, 0, ptr, 4);//

核心是用copy函式

int i = marshal.readint32(ptr);//

intptr轉為int

//從int 到 byte

byte resultbytes = new

byte[4

]; marshal.writeint32(ptr, i);

//int先轉為intptr

marshal.copy(ptr, resultbytes, 0, 4);//

核心是用copy函式

byte a1 = resultbytes[0

];

byte r1 = resultbytes[1

];

byte g1 = resultbytes[2

];

byte b1 = resultbytes[3

]; marshal.freehglobal(ptr);

//釋放記憶體

marshal類是.net中對非託管**操作的乙個封裝類。用這種方法,比直接用指標操作安全一點。

比較下來,這四種方法中,前兩種較為簡單。

int 與 byte 的相互轉換

int 與 byte 的相互轉換 1.最普通的方法 從byte 到 uint b new byte u uint b 0 b 1 8 b 2 16 b 3 24 從int 到 byte b 0 byte u b 1 byte u 8 b 2 byte u 16 b 3 byte u 24 2.使用 ...

int 與 byte 的相互轉換

關於 int 與 byte 的相互轉換,mattias sjogren 介紹了3種方法。請參見 將integer轉換成byte array 其實應該還有不少方法。在這裡,我歸納了包括mattias sjogren在內的4種方法。int 與 byte 的相互轉換 沐楓網誌 1.最普通的方法 2.使用 ...

char 型陣列Int型互轉

include include typedefunsignedcharuchar typedefunsignedintuint 轉換函式 temp 字元型陣列 pout int型陣列 length 字元型陣列的長度 這裡假設字元型陣列裡包含的都是偶數個元素 如果是奇數個數,則需要增加如下處理 檢查l...