zoukankan      html  css  js  c++  java
  • c#中int32与byte[]之间的互换,以及base64编码的转换

    byte[] c=System.BitConverter.GetBytes(b);

    至少可以通过三种方法来进行转换(见列表1)。在.NET Framework类库的System名字空间中有个叫做BitConverter的类,它是专门用来进行这种转换的。它有一个GetBytes方法,对 于大多数简单的类型来说,该方法都被重载了,它可以返回一个byte array来保存你传递的值。它也有几个ToTypeName方法用来将一个byte array转换成一个基本类型(primitive type):byte[] b = BitConverter.GetBytes(
       0xba5eba11 );
    //{0x11,0xba,0x5e,0xba}
    uint u = BitConverter.ToUInt32(
       new byte[] {0xfe, 0x5a, 0x11,
       0xfa},0 ); // 0xfa115afe

    在 运用BitConverter类时,要记住的一个重点是它的行为取决于硬件架构(代码在该硬件架构上运行)的字节顺序(endianness)——就是 说,integer字节在内存中的存储顺序。如果你将bit保存为可以在许多不同平台上读取的一个文件格式,那么就会出问题。BitConverter有 一个公有的IsLittleEndian字段,你可以查看它是如何运行的,但遗憾的是,你并不能改变它。

    也可以不用BitConverter类,而通过手动位移(bit shifting)来进行转换:  b = new byte[] {0xfe,0x5a,0x11,0xfa};
    u = (uint)(b[0] | b[1] << 8 |
       b[2] << 16 | b[3] << 24);
    b[0] = (byte)(u);
    b[1] = (byte)(u >> 8);
    b[2] = (byte)(u >> 16);
    b[3] = (byte)(u >> 24);
     
    用这种方法就可以避免字节顺序问题,因为可以完全控制字节的位置。

    最后——如果不介意用不安全的代码——可以通过直接的内存拷贝来实现转换,把一个指向byte array的指针(pointer)转换成一个指向integer类型的指针,然后取它的值(dereference):unsafe {
       fixed ( byte* pb = b )
       u = *((uint*)pb);
    }

     
    同BitConverter一样,这个方法的运行结果取决于代码在何种硬件上运行。

    如果要进行很多这种转换——比如说在一个循环中——而且想得到最佳性能,那么建议用最后两种方法中的一种。BitConverter有些慢,尽管区别不大。 ——M.S.

    /////////////////////

    byte[] imageStream = Convert.FromBase64String(base64code);
                        MemoryStream mStream = new MemoryStream(imageStream);
                        sortItem.image = new Bitmap(mStream);

    mStream.Close();

  • 相关阅读:
    某个牛人做WINDOWS系统文件详解
    常用ASP脚本程序集锦
    LINUX基础:文件安全与权限
    proftpd+mysql+quota
    apache2.0.49tomcat5.0.19jk2建立virtualHost
    URL Redirection(转) Anny
    顶级域名后缀列表(转) Anny
    \u4E00\u9FA5意义 Anny
    How to POST Form Data Using Ruby(转) Anny
    How to get rid of 'Enter password to unlock your login keyring' in Ubuntu(转) Anny
  • 原文地址:https://www.cnblogs.com/kevinzhwl/p/3878893.html
Copyright © 2011-2022 走看看