在C#中将任意数值类型数据与字节数组相互转换的一个方法
最近一个项目中需要通过串口传送数据,被传送的数据是float类型,传送时需传换为字节数组类型,试了一些方法,终于成功,写下来分享一下。
在C/C++中这是一个很简单的问题,无论是通过操作指针、内存拷贝还是通过共同体的方法都可以实现,如:
union myData
{
float f;
unsigned char c[4];
}
在给f赋值之后,直接访问c[0] ~c[3]就行了。
但在C#中没有类似的方法,要实现起来稍麻烦一些,下面的代码可实现这一功能:
using System.IO;
……
float f1 = 1.1F
MemoryStream s = new MemoryStream();
BinaryWriter w=new BinaryWriter(s );
byte[] b = new byte[100];
b=s.ToArray();
这就行了。
或者这样
float f1 = 1.1F;
byte[] b = new byte[4];
MemoryStream s = new MemoryStream(b);
BinaryWriter w=new BinaryWriter(s ) ;
w.Write(f1);
下面是字节数组转换为数值的代码:
float f2=BitConverter.ToSingle(b, 0);
监视一下f2的结果,为1.1,正确。
完整源代码见下页。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace testSerial
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
float f1 = 1.1F;
byte[] b = new byte[4];
MessageBox.Show("浮点数f1=" + f1.ToString());
MemoryStream s = new MemoryStream(b);
BinaryWriter w=new BinaryWriter(s );
w.Write(f1);
string showStr = "转换为字节数组:";
for (int i = 0; i < 4; i++)
{
showStr += " ";
showStr+=b[i].ToString();
}
MessageBox.Show(showStr);
float f2=BitConverter.ToSingle(b, 0);
MessageBox.Show("二进制数组转换为浮点数" + f2.ToString());
}
}
}