int 与 byte[] 的相互转换
http://www.cnblogs.com/ly4cn/archive/2005/09/08/232523.html
?
{0xfe,0x5a,0x11,0xfa};
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. 使用 BitConverter (强力推荐)
从int 到byte[]
byte[]?b?=?BitConverter.GetBytes(
???0xba5eba11?);?
//{0x11,0xba,0x5e,0xba} ? 从byte[]到int
uint?u?=?BitConverter.ToUInt32(
???new?byte[]?
{0xfe,?0x5a,?0x11,?
???0xfa},0?);?//?0xfa115afe 3. Unsafe代码 (虽然简单,但需要更改编译选项)
unsafe?
{
//?从int?到byte[]
fixed?(?byte*?pb?=?b?);
//?从byte[]?到?int
u?=?*((uint*)pb);
}
4. 使用Marshal类???
IntPtr?ptr?=?Marshal.AllocHGlobal(4);?//?要分配非托管内存
????byte[]?b=?new?byte[4]
{1,2,3,4};
//从byte[]?到?int
????Marshal.Copy(b,?0,?ptr,?4);
????int?u?=?Marshal.ReadInt32(ptr);?
//从int?到byte[]
????Marshal.WriteInt32(ptr,?u);
????Marshal.Copy(ptr,b,0,4);
????Marshal.FreeHGlobal(ptr);?//?最后要记得释放内存 ?
??? 使用第4种看起来比较麻烦,实际上,如果想把结构(struct)类型转换成byte[],则第4种是相当方便的。例如:
???int?len?=?Marshal.Sizeof(typeof(MyStruct));
????MyStruct?o;
????byte[]?arr?=?new?byte[len];//{
};![int 与 byte[] 的互相转换](http://img.reader8.net/uploadfile/jiaocheng/20140140/2740/2014012717405011612.gif)
????IntPtr?ptr?=?Marshal.AllocHGlobal(len);
????try
????
{
//?从byte[]?到struct?MyStruct
?????Marshal.Copy(arr,?index,?ptr,?Math.Min(length,?arr.Length?-?index));
?????o?=?(MyStruct)Marshal.PtrToStructure(ptr,?typeof(MyStruct));![int 与 byte[] 的互相转换](http://img.reader8.net/uploadfile/jiaocheng/20140140/2740/2014012717405011615.gif)
![int 与 byte[] 的互相转换](http://img.reader8.net/uploadfile/jiaocheng/20140140/2740/2014012717405011615.gif)
//?从struct?MyStruct?到?byte[]
?????Marshal.StructureToPtr(o,?ptr,?true);?//?使用时要注意fDeleteOld参数
?????Marshal.Copy(ptr,?arr,?0,?len);
????}
????finally
????
{
?????Marshal.FreeHGlobal(ptr);
????}
????return?o;
?
?
? public byte[] intToByte(int i) {??
02 byte[] bt = new byte[4];??
03 bt[0] = (byte) (0xff & i);??
04 bt[1] = (byte) ((0xff00 & i) >> 8);??
05 bt[2] = (byte) ((0xff0000 & i) >> 16);??
06 bt[3] = (byte) ((0xff000000 & i) >> 24);??
07 return bt;??
08 }??
09 public? static int bytesToInt(byte[] bytes) {??
10 int num = bytes[0] & 0xFF;??
11 num |= ((bytes[1] << 8) & 0xFF00);??
12 num |= ((bytes[2] << 16) & 0xFF0000);??
13 num |= ((bytes[3] << 24) & 0xFF000000);??
14 return num;??
15 }
文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/3_program/java/javajs/20090208/154987.html