Code-Schnipsel
Moderatoren: broesel, Martin Conrad, PatrickThema: HumanReadable2MachineReadble
HumanReadable2MachineReadble
hanki am 21.04.2006 um 09:27
da ich öfters mit grossen Zahlen zu tun habe, die auch gut in der Form "128k" anstatt "131072" darzustellen sind, habe ich mal folgende Funktion zusammngebastelt. Im Prinzip kann man es als Erweiterung zu strtoll() sehen.
Es hat bestimmt noch ein paar Macken, aber vielleicht hilfts ja jemandem.
Hanki
Lizenz : GPL, wie unter http://www.pronix.de/pronix-1041.html zu sehen.
#include <string.h>
#include <stdio.h>
long long int hstrtoll (const char *s, char **endptr) {
long long int number=0,multiplier=1;
char unit='\0';
int check=0;
char *buf=NULL;
buf=malloc(strlen(s));
check=sscanf(s,"%Ld%c%s",&number,&unit,buf);
if (check > 2 || check == 0) {
*endptr=strstr(s,buf);
free(buf);
return 0;
}
else if (check == 1) {
*endptr=NULL;
free(buf);
return strtoll(s,endptr,10);
}
switch (unit) {
case 'T' :
multiplier <<= 10;
case 'G' :
multiplier <<= 10;
case 'M' :
multiplier <<= 10;
case 'K' :
multiplier <<= 10;
break;
default : {
*endptr=strchr(s,unit);
free(buf);
return 0;
}
}
*endptr=NULL;
free(buf);
return multiplier*number ;
}
