/*****************************************************
//             //
//  SUPERSTAR II  Firmware Reference   //
//             //
//   FR 32bits Value演算程式     //
//             //
// 1.此程式原始碼由Microsoft Visual C++ 6.0撰寫。 //
// 2.本程式由C及C++程式碼構成,無使用到特殊函式。 //
// 3.主函式接收陣列格式:4陣列,正整數內容。  //
// 4.請注意主程式所接收FR的陣列格式是否正確。  //
// 5.FR陣列接收格式必須使用"unsigned char name[]"。//
//             //
//        此程式由swszg撰寫 //
//     E-MAIL:allen_szg@yahoo.com.tw //
*****************************************************/ 

//函式宣告--------------------------------------------
#include<iostream>  
#include<math.h>
#include<stdlib.h>  
  
using  std :: cout;
using  std :: endl;
//int  main();//脫離主程式檢查點
double FR_32bits(unsigned char in_buff[]);
double FR_32bits_Value(char bit_32[]);
int  FR_32bits_Sing(char bit_32[]);
double FR_32bits_Manyissa(char bit_32[]);
int  FR_32bits_Exponen(char bit_32[]);
//---------------------------------------------------
 
//START 32BIT的位移順序及轉換成2位元bit陣列--------------------------------------------
//int main()//脫離主程式檢查點
double FR_32bits(unsigned char in_buff[])
{
 int k=3,m,j,i,a;
 char c16to2[8],bit[32];
//數值測試點----------------------------------------
/*
 //64.86 {0x3B,0xB9,0x81,0x42}
 //3.07  {0x85,0xA7,0x44,0x40}
 //7.69 {0xB5,0x18,0xF6,0x40}
 unsigned char in_buff[4]={0x3B,0xB9,0x81,0x42};//程式測試點
*/
//--------------------------------------------------
//高至低位元順序排列----------------------------------------
 for(j=0;j<4;j++)
 {
//-------------------------------------------------------------------------------------
  a = in_buff[j];
//  cout<< a <<endl;
  for(i=7;i>0;i--)
  {
   c16to2[i] = a%2;
   a = a / 2;
  }c16to2[0]=a;
//  cout<< a <<endl;
//c16to2陣列檢查點---------------------------------------------------------------------
/*
  for(i=0;i<8;i++)
  {
   int print = c16to2[i];
   cout<< print ;
  }
  cout<< endl ;
*/
//-------------------------------------------------------------------------------------
  for(m=0;m<8;m++)
   {
    i = 0;
    i = 8 * k + m;
    bit[i]=c16to2[m];
   }
   
  k--;
 }
//----------------------------------------
//bit陣列檢查點------------------------------------------------------------------------
/*
 for(i=0;i<32;i++)
 {
  int print = bit[i];
  cout<< print ;
 }
*/
//-------------------------------------------------------------------------------------
 double Value=0;
 Value = FR_32bits_Value(bit);
 cout<< Value ;//Value檢查點
 system("pause");//Value回傳值停止點
 return 0;
}
//---------------------------------------------END 32BIT的位移順序及轉換成2位元bit陣列
//START 計算32BIT的Value值--------------------------------------------------------------
double FR_32bits_Value(char bit_32[])

 double value=0;
 value = FR_32bits_Sing(bit_32) * (1+FR_32bits_Manyissa(bit_32)) * pow(2,FR_32bits_Exponen(bit_32)-127) ;
// cout << value << endl;//value回傳值檢查點
// system("pause");//value回傳值停止點
 return value;
}
//----------------------------------------------------------------END 計算32BIT的Value值
//START 計算32BIT的Sing值--------------------------------------------------------------
int FR_32bits_Sing(char bit_32[])
{
 int sing=1;
 if(bit_32[0] == 0)
 {
  sing = 1;
 }
 else
 {
  sing = -1;
 }
 
 //cout << sing << endl;//sing回傳值檢查點
 return sing;
}
//----------------------------------------------------------------END 計算32BIT的Sing值
//START 計算32BIT的Exponent值--------------------------------------------------------------
int FR_32bits_Exponen(char bit_32[])
{
 int exponent=0;
 int i,n=7;
 for (i=1;i<9;i++)
 {
  exponent = exponent + bit_32[i] * pow(2,n);//計算Exponen的值
  n--;
 }
 //cout << exponent << endl;//exponent回傳值檢查點
 return exponent;
}
//----------------------------------------------------------------END 計算32BIT的Exponent值
//START 計算32BIT的Manyissa值--------------------------------------------------------------
double FR_32bits_Manyissa(char bit_32[])
{
 double manyissa=0;
 int i,n=0;
 for (i=9;i<33;i++)
 {
  n++;
  manyissa = manyissa + bit_32[i] * pow(2,-n);//計算Manyissa的值
 }
 //cout << manyissa << endl;//manyissa回傳值檢查點
 return manyissa;
}
//----------------------------------------------------------------END 計算32BIT的Manyissa值
 
arrow
arrow
    全站熱搜

    swszg 發表在 痞客邦 留言(0) 人氣()