float型数据与字节数组的转化
2014-03-04 18:16
1111 查看
float型数据与字节数组的转化MCU和PC的浮点数都是基于IEEE754格式的。有4字节(float)、8字节(double)、10字节(有一些不支持)。这里以4字节(float)浮点数为例。一、C语言转化常见的方法有:1、强制指针类型转换。
BitConverter类进行基础数据类型与字节数组之间的相互转换,此类便于操作基本形式的类型。一个字节定义为一个 8位无符号整数。包含的方法如下:
//转换float数据到字节数组 unsigned char i; float floatVariable; unsigned char charArray[4]; (unsigned char) *pdata = ((unsigned char)*)&floatVariable; //把float类型的指针强制转换为unsigned char型 for(i=0;i<4;i++) { charArray[i] = *pdata++;//把相应地址中的数据保存到unsigned char数组中 } //转换字节数组到float数据 float floatVariable; unsigned char i; void *pf; pf = &floatVariable; (unsigned char) * px = charArray; for(i=0;i<4;i++) { *(((unsigned char)*)pf+i)=*(px+i); }2、使用结构和联合
//定义结构和联合 typedef union { struct { unsigned char low_byte; unsigned char mlow_byte; unsigned char mhigh_byte; unsigned char high_byte; }float_byte; float value; }FLAOT_UNION;这样可以在程序中直接对各数据赋值,然后获取数据。如对float_byte中的各字节赋值,可以直接从value中获取float型数据,反之亦然。注意,从上面的转换可以看到,对于定义的数组unsignedchar charArray[4],一般charArray[0]代表低字节,charArray[3]代表高字节。二、c#在c#中可以使用BitConverter类中的函数进行转换,如下:
名称 | 说明 |
GetBytes(Double) | 以字节数组的形式返回指定的双精度浮点值。 |
GetBytes(Single) | 以字节数组的形式返回指定的单精度浮点值。 |
ToDouble | 返回由字节数组中指定位置的八个字节转换来的双精度浮点数。 |
ToSingle | 返回由字节数组中指定位置的四个字节转换来的单精度浮点数。 |
名称 | 说明 |
DoubleToInt64Bits | 将指定的双精度浮点数转换为 64 位有符号整数。 |
GetBytes(Boolean) | 以字节数组的形式返回指定的布尔值。 |
GetBytes(Char) | 以字节数组的形式返回指定的 Unicode 字符值。 |
GetBytes(Double) | 以字节数组的形式返回指定的双精度浮点值。 |
GetBytes(Int16) | 以字节数组的形式返回指定的 16 位有符号整数值。 |
GetBytes(Int32) | 以字节数组的形式返回指定的 32 位有符号整数值。 |
GetBytes(Int64) | 以字节数组的形式返回指定的 64 位有符号整数值。 |
GetBytes(Single) | 以字节数组的形式返回指定的单精度浮点值。 |
GetBytes(UInt16) | 以字节数组的形式返回指定的 16 位无符号整数值。 |
GetBytes(UInt32) | 以字节数组的形式返回指定的 32 位无符号整数值。 |
GetBytes(UInt64) | 以字节数组的形式返回指定的 64 位无符号整数值。 |
Int64BitsToDouble | 将指定的 64 位有符号整数转换成双精度浮点数。 |
ToBoolean | 返回由字节数组中指定位置的一个字节转换来的布尔值。 |
ToChar | 返回由字节数组中指定位置的两个字节转换来的 Unicode 字符。 |
ToDouble | 返回由字节数组中指定位置的八个字节转换来的双精度浮点数。 |
ToInt16 | 返回由字节数组中指定位置的两个字节转换来的 16 位有符号整数。 |
ToInt32 | 返回由字节数组中指定位置的四个字节转换来的 32 位有符号整数。 |
ToInt64 | 返回由字节数组中指定位置的八个字节转换来的 64 位有符号整数。 |
ToSingle | 返回由字节数组中指定位置的四个字节转换来的单精度浮点数。 |
ToString(array<Byte []()>[]) | 将指定的字节数组的每个元素的数值转换为它的等效十六进制字符串表示形式。 |
ToString(array<Byte []()>[], Int32) | 将指定的字节子数组的每个元素的数值转换为它的等效十六进制字符串表示形式。 |
ToString(array<Byte []()>[], Int32, Int32) | 将指定的字节子数组的每个元素的数值转换为它的等效十六进制字符串表示形式。 |
ToUInt16 | 返回由字节数组中指定位置的两个字节转换来的 16 位无符号整数。 |
ToUInt32 | 返回由字节数组中指定位置的四个字节转换来的 32 位无符号整数。 |
ToUInt64 | 返回由字节数组中指定位置的八个字节转换来的 64 位无符号整数。 |
相关文章推荐
- Hadoop序列化-------总结
- during its initialization is never read
- MacBook Pro OS X Mavericks chrome 33 google 帐户同步 无限次漰溃 解决方案
- 九九乘法表
- ios UITableView的移动、添加和删除
- mysql利用phpmyadmin导入数据出现#1044错误 的可能原因
- Android AIDL使用详解 (转)
- linux学习之shell
- 递归练习:猴子吃桃问题
- wget
- 程序员工作态度
- UIViewContentMode
- 闲话 + .Net yeild语句
- 大胆的预测:百度文库、在线博客或被微软Office在线编辑器取代
- error LNK2019: 无法解析的外部符号 解决办法
- 透析C/S和B/S结构
- girworld
- DDR2 sodimm + Flash + Triple-Speed Ethernet + IO in nios
- GIt/Github常用命令
- 哈佛结构和冯·诺依曼结构的区别