在C#中将任意数值类型数据与字节数组相互转换的一个方法

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());

        

         }

     }

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值