http://www.pronix.de -> Forum -> C-Programmieren -> Code-Schnipsel

Unterseiten

Code-Schnipsel

Moderatoren: broesel, Martin Conrad, Patrick

Thema: HumanReadable2MachineReadble

  • (nur registrierte Mitglieder)

HumanReadable2MachineReadble

hanki am 21.04.2006 um 09:27

Hallo Leute,

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

 
  • (nur registrierte Mitglieder)