這種轉換有有意義的,比如可以將多個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...