序列通訊中浮點數和整型數的處理辦法

2021-05-28 12:45:34 字數 1760 閱讀 4422

序列通訊中浮點數和整型數的處理辦法

序列通訊中浮點數和整型數的處理辦法

序列通訊是以位元組為單位進行傳送的,對於浮點數和整型數都需要進行轉換才能進行通訊。

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

轉化常見的方法有:

一、強制指標型別轉換。

//   轉換int資料到位元組陣列   

unsigned int intvariable,i;

unsigned char chararray[2];

(unsigned char) * pdata = ((unsigned char)*)&intvariable;  //進行指標的強制轉換 

for(i=0;i<2;i++)

//   轉換float資料到位元組陣列

unsigned int i;

float floatvariable;

unsigned char chararray[4];

(unsigned char) * pdata = ((unsigned char)*)&floatvariable;  //進行指標的強制轉換

for(i=0;i<4;i++)

//   轉換位元組陣列到int資料

unsigned int   intvariable="0";

unsigned char  i;

void   *pf;    

pf   =&intvariable;

(unsigned char) * px = chararray; 

for(i=0;i<2;i++)

//   轉換位元組陣列到float資料

float   floatvariable="0";

unsigned char  i;

void   *pf;    

pf   =&floatvariable;

(unsigned char) * px = chararray; 

for(i=0;i<4;i++)

二、使用結構和聯合,這是我最喜歡的方法

定義結構和聯合如下

typedef union float_byte;

struct float_word;

float  value;

}float;

typedef union   d1;

unsigned int value;

} int;

使用方法:

對於浮點數:

float floatvariable;在程式中直接使用floatvariable.float_byte.high_byte,floatvariable.float_byte.mhigh_byte,

floatvariable.float_byte.mlow_byte,floatvariable.float_byte.low_byte這四個位元組就可以方便的進行轉換了。

對於整數:

int intvariable;在程式中直接使用intvariable.value.high_byte,intvariable.value.low_byte就ok了。

三、對整型數可以用數**算的方法進行轉換

unsigned int intvariable;

unsigned char low_byte = intvariable%256;

unsigned char high_byte = intvariable/256;

串列埠通訊中整型和浮點型資料的處理和傳送

在做下位機通訊時往往會用到串列埠,包括下位機將資料傳輸給上位機,或者是下位機與下位機之間進行資料傳輸,這時候就會遇到傳送資料的問題,微控制器通過串列埠 傳送資料時往往是一次乙個位元組 8位 如果傳輸char 8位 型資料則很好辦,只需要直接傳送就可以了,但是在傳送int型資料和float型資料時 就...

21 浮點數的處理

在計算機中所有的數字都是以 2 進製來表示,但 10 進製的小數,在計算機中就不能夠精確的表示,只能無限的接近,而不能精確的表示。0.1 0.9 中只有 0.5 能夠使用二進位制精確的表示,其他均需要擷取指定的位數來表示 原理參見引用文章 由於浮點數在計算機中儲存時不精確的,所以浮點數直接進行四則運...

ACM中的浮點數精度處理

在acm中,精度問題非常常見。其中計算幾何頭疼的地方一般在於 量大和精度問題,量問題只要平時注意積累模板一般就不成問題了。精度問題則不好說,有時候乙個精度問題就可能成為一道題的瓶頸,讓你debug半天都找不到錯誤出在哪。1.浮點數為啥會有精度問題 浮點數 以c c 為準 一般用的較多的是float,...