1. 程式人生 > >float型資料與位元組陣列的轉化

float型資料與位元組陣列的轉化

MCUPC的浮點數都是基於IEEE754格式的。有4位元組(float)8位元組(double)、10位元組(有一些不支援)。這裡以4位元組(float)浮點數為例。

一、C語言轉化常見的方法有:
1
、強制指標型別轉換。

//轉換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類中的函式進行轉換,如下:

名稱

說明

返回由位元組陣列中指定位置的八個位元組轉換來的雙精度浮點數。

返回由位元組陣列中指定位置的四個位元組轉換來的單精度浮點數。

BitConverter類進行基礎資料型別與位元組陣列之間的相互轉換,此類便於操作基本形式的型別。一個位元組定義為一個 8位無符號整數。包含的方法如下:

名稱

說明

以位元組陣列的形式返回指定的 Unicode 字元值。

以位元組陣列的形式返回指定的 16 位有符號整數值。

以位元組陣列的形式返回指定的 32 位有符號整數值。

以位元組陣列的形式返回指定的 64 位有符號整數值。

返回由位元組陣列中指定位置的一個位元組轉換來的布林值。

返回由位元組陣列中指定位置的兩個位元組轉換來的 Unicode 字元。

返回由位元組陣列中指定位置的八個位元組轉換來的雙精度浮點數。

返回由位元組陣列中指定位置的兩個位元組轉換來的 16 位有符號整數。

返回由位元組陣列中指定位置的四個位元組轉換來的 32 位有符號整數。

返回由位元組陣列中指定位置的八個位元組轉換來的 64 位有符號整數。

返回由位元組陣列中指定位置的四個位元組轉換來的單精度浮點數。

返回由位元組陣列中指定位置的兩個位元組轉換來的 16 位無符號整數。

返回由位元組陣列中指定位置的四個位元組轉換來的 32 位無符號整數。

返回由位元組陣列中指定位置的八個位元組轉換來的 64 位無符號整數。

相關推薦

float資料位元組陣列轉化

MCU和PC的浮點數都是基於IEEE754格式的。有4位元組(float)、8位元組(double)、10位元組(有一些不支援)。這裡以4位元組(float)浮點數為例。 一、C語言轉化常見的方法有: 1、強制指標型別轉換。 //轉換float資料到位元組陣列 unsi

關於float資料int位元組陣列轉化

java中float與int轉化有int i = Float.floatToIntBits(v);及相反函式,相當方便; 下面介紹的是C++中 c++ float int 按位互轉 inline float int32_bitcast_float32(int temp){r

java 字串字元陣列相互轉化,字串位元組陣列相互轉化

package com.liuxd; /** * Created by Liuxd on 2018-11-02. */ public class TestString { public static void main(String[] args) throws Exception

變數(int)位元組陣列(byte[])的相互轉換

// int2byte.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include <Windows.h> /* #define MAKEWORD(a, b) ((WORD)(((BYTE)(((DWORD_PT

C#基礎資料型別位元組陣列(記憶體中的資料格式)相互轉換(BitConverter 類)

在某種通訊協議中(如 Modbus),可能需要把一些基本的資料型別記憶體中的表示形式轉換成以位元組陣列的形式,方便傳送。C/C++中可以利用指標等操作完成,但C#中沒有指標,咋辦呢?可以用BitConverter類啊。 1,把double型別轉換成byte陣列,float型別的話,在1234.5678後加

php字串byte位元組陣列轉化類示例

<?php /** * byte陣列與字串轉化類 */class Bytes { /** * 轉換一個String字串為byte陣列 * @param $str 需要轉換的字串 * @param $bytes 目標byte陣列 * @author Zikie */  

基本資料型別的介紹及轉換,基本資料型別字串之間轉換,字串字元陣列之間轉換以及字串位元組陣列之間轉換

目錄 一.Java的基本資料型別介紹 二.各類基本資料之間的轉換 三.基本資料型別和String之間轉換(附:物件包裝類及所對應的基本資料型別) 四.String與字元陣列轉換 五.Strin

位元組陣列轉化為十六進位制字串時 &0xff

我是資源的搬運工~~~ 關於這個位元組陣列轉化為十六進位制字串時 &0xff,看到很多次了,這裡整理一下網上的資料,記錄一下: byte 為什麼要&0xff byte 為什麼要 &0xff /** * 位元組陣列轉換成字串HEX表示 *

位元組陣列轉化為十六進位制字串時 &0xff

我是資源的搬運工~~~ 關於這個位元組陣列轉化為十六進位制字串時 &0xff,看到很多次了,這裡整理一下網上的資料,記錄一下: /** * 位元組陣列轉換成字串HEX表示 * * @param data 位元組陣列

[轉]串列埠收發float資料

如果是格式化 ,用sprintf / printf; 如果傳送原始記憶體資料流, 可按下面傳送, 傳送  float a = 1.23; double b=3.2; SendByt

字串字元陣列轉化

1:字元陣列換為字串 見程式碼 #include <iostream> #include <string> using namespace std;   int main

float資料寫入eeprom,以及對eeprom操作的注意事項

做專案需要將float型資料存到微控制器自帶的eeprom裡,微控制器型號是STC12C5A60S2。不過每次只能對一個位元組進行操作即unsigned char型。之前存過unsigned long型的其實是一樣的他們都要佔用四個位元組。可以用聯合的方法,這裡提供個簡單的

float資料轉化成int

  在將float型資料轉化成int資料前,首先我們要了解float型資料在記憶體中的儲存方式,float型別在記憶體中佔4個位元組32個位元位,如下:   0 00000000 00000000000000000000000 1.符號位     其中最左邊的

MySql資料庫中long資料日期相互轉換

   mysql是我們用的最多的資料庫之一,我們呢平時為了方便查詢,通常會選擇將時間儲存為毫秒或者秒的形式。但是這樣很不直觀,今天就看看mysql怎樣做到long型資料與日期相互轉換。 1. 秒數與Date之間的轉換:select from_unixtime(1388776825); 還可以定義

c語言格式輸出剖析——用%d輸出float型別資料int型別%f格式輸出

C語言學習實踐 摘要     本文將從C語言變數的本質,不同型別變數在記憶體中的儲存方式,型別強制轉換,格式輸出4個方面闡述C語言初學階段的一些問題。 關鍵詞:記憶體儲存,型別強制轉換,反彙編 1. 變數     變數來源於數學,是計算機語言中能儲存計算結果或能表示值抽象

Scala(八)多維陣列、Java資料Scala陣列的隱式轉換

多維陣列 :多維陣列元素還是陣列,陣列套陣列,就是多維陣列 構建一個指定行與列的二維陣列 package com.lyz.six object ManyArrayLearn { def ma

char 資料十進位制資料之間的轉換

一, a = com_rx_buff[10] - 0x30; b = com_rx_buff[11] - 0x30;                                          

Qt中int轉化為16進位制後形成QString時,int資料為負需要轉化為其補碼時的操作

Qt的的的中封裝了內部函式可以直接將INT型轉化為16進位制,字串表示 int suanz = 10000; QString str = QString("%1").

java 程式碼轉換音訊資料格式(位元組陣列轉換)

目前音訊格式有很多,本文針對PCM 音訊檔案進行轉換 所謂pcm 就是將聲音等模擬訊號變成符號化的脈衝列,再予以記錄。PCM訊號是由[1]、[0]等符號構成的數字訊號。與模擬訊號比,它不易受傳送系統的雜波及失真的影響。動態範圍寬,可得到音質相當好的影響效果。PCM軌跡與視訊

java中物件位元組陣列相互轉換

1.首先物件要繼承Serializable介面 將位元組轉換為物件 public static Object ByteToObject(byte[] bytes) { Object obj = null; try { // bytearray to obje