将二进制数串转为数值

#include <iostream>
#include <cassert>

using namespace std;

const char *parse_integer(const char *binary_string, double &value)
{
    assert(NULL != binary_string);
    while (*binary_string != 0 && *binary_string != '.')
    {
        assert(*binary_string == '0' || *binary_string == '1');
        value = 2 * value + (*binary_string & 0x0f);
        ++binary_string;
    }
 cout<<binary_string<<endl;

    return binary_string;
}

const char *parse_float(const char *binary_string, double &value)
{
    assert(NULL != binary_string && *binary_string == '.');
    const double BASE = 0.5;
    double baseBit = BASE;

    while (*++binary_string != 0)
    {
        assert(*binary_string == '0' || *binary_string == '1');
        value += baseBit * (*binary_string & 0x0f);
        baseBit *= BASE;
    }
  //  cout<<binary_string<<endl;
    return binary_string;
}

double parse_binary(const char *binary_string)
{
    assert(NULL != binary_string);

    double value = 0.0;

    const char *reminder = parse_integer(binary_string, value);

    if (*reminder != 0)
        parse_float(reminder, value);
  // cout<<value<<endl;
    return value;
}

int main()
{
    cout << parse_binary("1000.11") << "/n";

    return 0;

}

在此谢谢jimking2000,

 

 

 

 

 

 

 

 

#include <stdio.h>
FILE
*fi,*fo;
int v;
int main() {
    fi
=fopen("INPUT","r");
   
if (NULL==fi) {
        printf(
"Can not find file INPUT/n");
       
return 1;
    }
    fo
=fopen("OUTPUT","wb");
   
if (NULL==fo) {
        printf(
"Can not create file OUTPUT/n");
        fclose(fi);
       
return 2;
    }
   
while (1) {
       
if (feof(fi)) break;
       
if (1==fscanf(fi,"%d",&v)) {
            fwrite(
&v,sizeof(int),1,fo);
        }
else {
            fscanf(fi,
"%*c");
        }
    }
    fclose(fo);
    fclose(fi);
   
return 0;
}

赵忠的

 

 

我的

 

 

#include<iostream>
#include<cassert>
using namespace std;
char *chage(const char *src,double &value)
{
 assert(NULL!=src&&*src!='.');
 const char *p=src;
 cout<<strlen(src);
  int i=0;
 while(*p++!='.')
  i++;

 cout<<"i"<<i<<endl;
 const int j=i;
 char *p1=new char(j);
 int z=0;
    while(*src!='/0'&&*src!='.')
 {

  assert(*src=='0'||*src=='1');
  *(p1+z)=*src;
  cout<<src<<"src"<<endl;
  ++src;
  ++z;
 }

 return p1;
}
void main()
{


 double value=0.0;
 cout<<chage("10001.011",value);
}

 

 

 

经典::

#include <stdio.h>  

#include "math.h"
char *p="0.916551E-04";
int main()
{   
    // flag: 0-->no sign, 1-->positive sign, -1,negtive sign
    int base=0, weight=0, lenTotal=0, lenBase=0, lenWeight=0, i=0, flag =0 ;
    float result=0;
    //lenTotal=strlen(p);
    char* pCopy=p;
    while (*pCopy)
    {
        if ('e' == (*pCopy) || 'E'==(*pCopy))
        {
            lenBase = pCopy-p;
            flag = ( '+' == (*(pCopy+1))  ) ? 1:
                ( '-' == (*(pCopy+1))  ) ?-1 :0 ;
            ++pCopy;
        }       
        ++pCopy;
    }
    lenTotal = pCopy-p-2; //2 --> 'e+'
    lenWeight = lenTotal -lenBase;
    i=lenWeight;
    while (i)
    {
        weight += (flag * (*(pCopy-i)-'0') * (int)pow(10.0, i-1));
        --i;
    }
    i= 2;
    result += (*p-'0') * pow(10.0, weight);
    while (i<lenBase)
    {
        result += (*(p+i)-'0') * pow(10.0,  --weight);
        ++i;
    }
    printf("%.14f", result);
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值