Byte数组与其它类型间的转换
可以通过BitConverter类来将字节数组转换为其它类型
返回类型 | 方法 |
bool | ToBoolean(Byte[], Int32) |
char | ToChar(Byte[], Int32) |
double | ToDouble(Byte[], Int32) |
short | ToInt16(Byte[], Int32) |
int | ToInt32(Byte[], Int32) |
long | ToInt64(Byte[], Int32) |
float | ToSingle(Byte[], Int32) |
ushort | ToUInt16(Byte[], Int32) |
uint | ToUInt32(Byte[], Int32) |
ulong |
ToUInt64(Byte[], Int32) |
在运用BitConverter类时,要记住的一个重点是它的行为取决于硬件架构(代码在该硬件架构上运行)的字节顺序(endianness)——就是说,integer字节在内存中的存储顺序。如果你将bit保存为可以在许多不同平台上读取的一个文件格式,那么就会出问题。BitConverter有一个公有的IsLittleEndian字段。
例如在计算机结构为 little-endian 的情况下反转数组(即首先存储最低有效字节),然后调用 ToInt32(Byte[], Int32) 方法以将数组中的四个字节转换为 int。ToInt32(Byte[], Int32) 的第二个参数指定字节数组的起始索引。
byte[] bytes = { 0, 0, 0, 25 }; // If the system architecture is little-endian (that is, little end first), // reverse the byte array. if (BitConverter.IsLittleEndian) Array.Reverse(bytes); int i = BitConverter.ToInt32(bytes, 0); Console.WriteLine("int: {0}", i); // Output: int: 25
在此示例中,调用 BitConverter 类的 GetBytes(Int32) 方法以将 int 转换为字节数组。
说明:
输出可能会根据计算机结构的 endian 设置而不同。
byte[] bytes = BitConverter.GetBytes(201805978); Console.WriteLine("byte array: " + BitConverter.ToString(bytes)); // Output: byte array: 9A-50-07-0C