c#中int32与byte[]的交换,以及base64编码的转换

来源于 精准百科 2023-10-11 21:45

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

至少有三种转换方法(参见清单 1)。 .NET Framework类库的System命名空间中有一个名为BitConverter的类,专门用来执行这种转换。它有一个 GetBytes 方法,该方法对于大多数简单类型都是重载的,并返回一个字节数组来保存您传递的值。它还具有几个用于将字节数组转换为原始类型的 ToTypeName 方法: byte[] b = BitConverter.GetBytes(
0xba5eba11 );
//{0x11,0xba,0x5e,0xba } T UINT U = Bitconveter.touint32(
新字节[]{0xfe,0x5a,0x11,
0xfa},0); // 0xfa115afe

需要记住的重要一点是,它的行为取决于代码运行所在的硬件架构的字节顺序 - 即整数字节在内存中存储的顺序。如果将位保存为一种可以在许多不同平台上读取的文件格式,则可能会出现问题。 BitConverter 有一个公共 IsLittleEndian 字段,您可以看到它是如何运行的,但不幸的是您无法更改它。

您还可以使用 BitConverter 类通过手动位移位进行转换: b = new byte[] {0xfe,0x5a,0x11,0xfa};
u = (uint)(b[0] | b[ 1] << 8 |
b[2] << 16 | b[3] << 24);
b[0] = (字节)(u);
b[1 ] = (字节)(u >> 8);
b[2] = (字节)(u >> 16);
b[3] = (字节)(u >> 24);

这样您就可以避免字节顺序问题,因为您可以完全控制字节位置。

最后 - 如果您不介意使用不安全代码 - 您可以通过直接内存复制来执行转换,将指向字节数组的指针转换为指向整数的指针,然后获取其值(取消引用):不安全{
固定 ( byte* pb = b )
u = *((uint*)pb);
}


与 BitConverter 一样,此方法的结果取决于代码运行的硬件。

如果您要进行大量此类转换(例如在循环中)并且想要获得最佳性能,建议使用最后两种方法之一。 BitConverter 稍慢,但差异并不显着。 ——M.S.

/

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

mStream.Close();

登录后参与评论