c# 中的不同类型间的转化

转载 2011年01月14日 16:28:00

在做通信编程的时候,数据发送多采用串行发送方法,实际处理的时候多是以字节为单位进行处理的。在C/C++中 多字节变量与Byte进行转化时候比较方便 采用UNION即可
废话少说看示例:

typedef union
{
double data_df;
byte     data_b[8];
}DoubleYByte;
本示例实现了double与byte的相互转化
typedef union
{
float data_f;
byte data_b;
}FloatYByte;
本示例实现了float与byte的相互转化
其他的数据类型short int long等都可以采用上述示例转换 在C/C++中可以很容易的实现

但是在上位机编程中,采用C#编程就比较麻烦,因为没有union可用
但是C#提供一个类system.BitConverter来专门解决这种转换问题,该类如下显示
方法
DoubleToInt64Bits    将指定的双精度浮点数转换为 64 位有符号整数。
GetBytes    已重载。 将指定的数据转换为字节数组。
Int64BitsToDouble    将指定的 64 位有符号整数转换成双精度浮点数。
ToBoolean    返回由字节数组中指定位置的一个字节转换来的布尔值。
ToChar    返回由字节数组中指定位置的两个字节转换来的 Unicode 字符。
ToDouble    返回由字节数组中指定位置的八个字节转换来的双精度浮点数。
ToInt16    返回由字节数组中指定位置的两个字节转换来的 16 位有符号整数。
ToInt32    返回由字节数组中指定位置的四个字节转换来的 32 位有符号整数。
ToInt64    返回由字节数组中指定位置的八个字节转换来的 64 位有符号整数。
ToSingle    返回由字节数组中指定位置的四个字节转换来的单精度浮点数。
ToString    已重载。 将指定的字节数组的每个元素的数值转换为它的等效十六进制字符串表示形式。
ToUInt16    返回由字节数组中指定位置的两个字节转换来的 16 位无符号整数。
ToUInt32    返回由字节数组中指定位置的四个字节转换来的 32 位无符号整数。
ToUInt64    返回由字节数组中指定位置的八个字节转换来的 64 位无符号整数。
若想把float类型转化为byte示例如下:
float a=1.23;
byte[] b=BitConverter.GetBytes(a);
若想把变量b重新转化为float类型可以使用toSingle方法,示例如下:
float c=BitConverter.ToSingle(b,0);//应为a在b中其实字节为0,故第二个参数为0

还有就是string与byte[]的变换 如果知道就很简单
     byte[] byteArray = System.Text.Encoding.Default.GetBytes(  str  );
     string str = System.Text.Encoding.Default.GetString( byteArray );
在System.Text.Encoding class中,还有很多其它有用的方法,像GetChars,从一个byte[]转成一个char[],等等,还有其它编码方式的,如System.Text.UTF8Encoding class、System.Text.UnicodeEncoding class等,根据不同需要可选不同的class。 具体请参考MSDN

各位大侠,看完之后应该对通信编程中数据类型转化问题应该不会头痛了吧 

 

转自:http://hi.baidu.com/%C2%E4%C0%D7%BF%F1%C8%CB/blog/item/38397c1339e7ee105aaf53f8.html

相关文章推荐

C#不同类型的成员变量(字段)的默认值

创建类的一个实例时,在执行构造函数之前,如果你没有给成员变量赋初始值,C#编译器缺省将每一个成员变量初始化为他的默认值。 如果变量是方法的局部变量,编译器就会认为在使用该变量之前,代码必须给它显...
  • md521
  • md521
  • 2011年11月10日 14:49
  • 1780

[Unity&C#&接口]通过接口调用不同类型 物体 的继承了接口的组件

车TI_Car、和墙TI_Wall这 两 类物体 都继承了一个 接口 TI_Damage,通过另外一个 GameObject的普通组件 Test_Interface,  在 GameObject的组件...

.NET(C#)中不同级别的安全透明代码对类型的影响

测试代码将测试一个方法和类默认在全部信任权限下和部分信任权限下的代码类型。 上面说的默认就是指未加入其他安全透明类型的特性。 代码类型可以是: 透明代码(Transparent Co...
  • mryize
  • mryize
  • 2015年10月28日 17:17
  • 47

C#中根据系统类型切换不同的SQLite DLL

原贴地址:http://www.cnblogs.com/lzjsky/archive/2010/09/06/1819321.html 原来使用Win7的32位系统,进行C#工程的开发,后来重装系统,...
  • rztyfx
  • rztyfx
  • 2013年10月08日 17:50
  • 2002

C#控制台基础 out类型的意义,函数需要返回不同类型的值

镇场诗:慈心积善融学习,技术誓为大家学。善心速造多好事,前人栽树后乘凉。我今于此写经验,愿见文者得启发。 ——————————————————————————————————————————————...

使用泛型实现类型转化-使用通配符上限下限区分协变和逆变采取不同的转化方式

泛型作用:  泛型可以用于三种场景:  1、简单的限定参数类型;  2、用于类型转化的参数限定,即通配符类型上限和下限,因为在转化的时候,子类转父类是协转,是自动的,父类转子类是逆转,需要编写代码手动...
  • bestcxx
  • bestcxx
  • 2017年07月26日 07:30
  • 184

C语言中不同的结构体类型的指针间的强制转换详解

C语言中不同类型的结构体的指针间可以强制转换,很自由,也很危险。只要理解了其内部机制,你会发现C是非常灵活的。一.结构体声明如何内存的分布, 结构体指针声明结构体的首地址, 结构体成员声明该成员在结构...

深入理解C系列:不同类型变量的变量名和内存间的关系

有了前面两篇的基础,下面正式开扒变量名和内存的关系,先看一段大家很熟悉的代码:   int i;   scanf_s("%d", &i);   int i;,在这一句就为i分配了内存(...
  • sole_cc
  • sole_cc
  • 2014年10月14日 16:28
  • 544

C/C++开发语言系列之16---C++不同类型数据间的转换

一、标准类型数据间的转换 C++还提供显式类型转换,程序人员在程序中指定将一种指定的数据转换成另一指定的类型,其形式为    类型名(数据) 如    int(89.5) 其作用是将89.5...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c# 中的不同类型间的转化
举报原因:
原因补充:

(最多只允许输入30个字)