在 ASP.NET 开发过程中,System.BitConverter 类是一个非常有用的工具,它提供了一系列静态方法,用于将基本数据类型(例如整数、浮点数、字符和布尔值)转换为字节数组(Byte[]),并且支持从字节数组逆向转换回原始数据类型。
主要成员:
/* 字段 */
BitConverter.IsLittleEndian // 布尔值,指示当前系统的字节序是否为小端模式,在 Windows 系统下通常为 true。
/* 静态方法 */
BitConverter.GetBytes() // 获取指定参数的字节数组,支持的数据类型包括 Boolean、Char、Double、Int16、Int32、Int64、Single、UInt16、UInt32 和 UInt64。
BitConverter.ToBoolean() // 将字节数组转换为布尔值。
BitConverter.ToChar() // 将字节数组转换为字符。
BitConverter.ToDouble() // 将字节数组转换为双精度浮点数。
BitConverter.ToInt16() // 将字节数组转换为 16 位整数。
BitConverter.ToInt32() // 将字节数组转换为 32 位整数。
BitConverter.ToInt64() // 将字节数组转换为 64 位整数。
BitConverter.ToSingle() // 将字节数组转换为单精度浮点数。
BitConverter.ToUInt16() // 将字节数组转换为无符号 16 位整数。
BitConverter.ToUInt32() // 将字节数组转换为无符号 32 位整数。
BitConverter.ToUInt64() // 将字节数组转换为无符号 64 位整数。
BitConverter.ToString() // 将字节数组转换为十六进制字符串。
BitConverter.DoubleToInt64Bits() // 将双精度浮点数转换为 64 位整数表示。
BitConverter.Int64BitsToDouble() // 将 64 位整数转换为双精度浮点数表示。
整数与字节数组之间的转换:
protected void Button1_Click(object sender, EventArgs e)
{
// 将一个整数转换为字节数组
int n1 = 0x1F2F3F4F; // 十六进制表示,等同于十进制的 523190095
byte[] bs = BitConverter.GetBytes(n1);
// 查看字节数组的十六进制表示
string s1 = BitConverter.ToString(bs); // 结果为 4F-3F-2F-1F
// 再次转换回整数
int n2 = BitConverter.ToInt32(bs, 0); // 结果为 523190095
TextBox1.Text = string.Concat(n1, "\n", s1, "\n", n2);
}
双精度浮点数与字节数组及 64 位整数之间的转换:
protected void Button1_Click(object sender, EventArgs e)
{
double pi = 3.1415926;
byte[] bs = BitConverter.GetBytes(pi); // 结果为 4A-D8-12-4D-FB-21-09-40
Int64 num = BitConverter.ToInt64(bs, 0); // 结果为 4614256656431372362
TextBox1.Text = string.Concat(pi, "\n", BitConverter.ToString(bs), "\n", num);
}
// 使用 DoubleToInt64Bits() 方法可以直接完成上述转换
protected void Button2_Click(object sender, EventArgs e)
{
double pi = 3.1415926;
Int64 num = BitConverter.DoubleToInt64Bits(pi); // 结果为 4614256656431372362
TextBox1.Text = string.Concat(pi, "\n", num);
}
// 以下转换会改变字节的顺序
protected void Button3_Click(object sender, EventArgs e)
{
double pi = 3.1415926;
Int64 num = Convert.ToInt64(pi); // 结果为 3
TextBox1.Text = num.ToString();
}