#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;
}