close
/*****************************************************
// //
// 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 //
*****************************************************/
// //
// 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[]);
//---------------------------------------------------
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}
//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--;
*/
//--------------------------------------------------
//高至低位元順序排列----------------------------------------
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);
//----------------------------------------
//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回傳值停止點
system("pause");//Value回傳值停止點
return 0;
}
//---------------------------------------------END 32BIT的位移順序及轉換成2位元bit陣列
}
//---------------------------------------------END 32BIT的位移順序及轉換成2位元bit陣列
//START 計算32BIT的Value值--------------------------------------------------------------
double FR_32bits_Value(char bit_32[])
{
double value=0;
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回傳值停止點
// system("pause");//value回傳值停止點
return value;
}
//----------------------------------------------------------------END 計算32BIT的Value值
}
//----------------------------------------------------------------END 計算32BIT的Value值
//START 計算32BIT的Sing值--------------------------------------------------------------
int FR_32bits_Sing(char bit_32[])
{
int FR_32bits_Sing(char bit_32[])
{
int sing=1;
if(bit_32[0] == 0)
{
sing = 1;
}
else
{
sing = -1;
}
//cout << sing << endl;//sing回傳值檢查點
if(bit_32[0] == 0)
{
sing = 1;
}
else
{
sing = -1;
}
//cout << sing << endl;//sing回傳值檢查點
return sing;
}
//----------------------------------------------------------------END 計算32BIT的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--;
}
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值
}
//----------------------------------------------------------------END 計算32BIT的Exponent值
//START 計算32BIT的Manyissa值--------------------------------------------------------------
double FR_32bits_Manyissa(char bit_32[])
{
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的值
}
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值
}
//----------------------------------------------------------------END 計算32BIT的Manyissa值
全站熱搜