Oktal zu Dezimal in C?
-
hallo,
bietet die standardlib irgendwelche funktionen, mit der ich eine oktal-zahl in eine dezimalzahl umwandeln kann.
p.s.: sscanf oder atoi?
-
...
-
Swordfish schrieb:
#include <iostream> int main() { std::cout << std::oct << 44 << '\n'; }
1. c
2. ich brauch die zahl umgewandelt im speicher, nicht (nur) auf dem bildschirm.
-
int i = 0123;
-
Belli schrieb:
int i = 0123;
ja genau das hab ich gefragt...
was soll den der scheiß?
-
mein gott, ich hab eine octal zahl, die in eine dezimal-zahl umgewandelt werden soll, ist das denn so schwer zu verstehen?
int octal=77; // daraus folgt: int decimal=63;
-
Nein, die C Standard Library bietet keine derartige Funktion. Schreib sie dir doch selbst, v.a. wenn du so etwas Fragwürdiges wie dein Beispiel vorhast!
-
EinGast schrieb:
Nein, die C Standard Library bietet keine derartige Funktion. Schreib sie dir doch selbst, v.a. wenn du so etwas Fragwürdiges wie dein Beispiel vorhast!
was ist bitte daran fragwürdig?
ich hab einfach ne octalzahl, die in eine dezimalzahl umgewandelt werden muss.
-
int octal = 077;
printf("%d", octal); //63
-
...
-
fragwürdig? schrieb:
EinGast schrieb:
Nein, die C Standard Library bietet keine derartige Funktion. Schreib sie dir doch selbst, v.a. wenn du so etwas Fragwürdiges wie dein Beispiel vorhast!
was ist bitte daran fragwürdig?
ich hab einfach ne octalzahl, die in eine dezimalzahl umgewandelt werden muss.Es ist fragwürdig, weil das die gleiche Zahl ist.
Wo kommmt denn die "Oktalzahl" her? Benutzereingabe?Es ist zwar mit ein wenig hin und her möglich, aber ziemlich sinnfrei, weil octal nie den Wert 077, sondern immer den Wert 77 hat. (Siehe Bellis Code für eine Konstante mit dem Wert 077)
#include <stdlib.h> #include <stdio.h> int main(void){ char buf[8]={0}; char *endptr; const int octal = 77; snprintf(buf, 7, "%d", octal); const long decimal = strtol(buf, &endptr, 8); if(*endptr != '\0') printf("error at: %s\n", endptr); else printf("%so == %ldd\n", buf, decimal); return 0; }
-
Belli schrieb:
int octal = 077;
printf("%d", octal); //63och bitte! nun zeigt doch bitte ein einziges zeichen von intelligenz!!! das macht mich hier ganz traurig
also nochmal:
die zahl muss "richtig" im speicher umgewandelt werden, weil sie später weiterverarbeitet wird.wirklich traurig, wenn erwachsene menschen nicht lesen können. so eine arme seele
-
Dorftrottel. Troll.
Du hast keine Ahnung wovon du redest.
-
Vielleicht lernst Du erst mal lesen?
In meinem Beispiel wird eine Oktalzahl benutzt, in Deinem Beispiel ist weit und breit nichts von einer Oktalzahl zu sehen, die wird nämlich nicht dadurch zur Oktalzahl, dass Du der Variablen den Namen 'octal' gibst, ebensowenig wie das hier:int string = 77;
ein String ist.
-
ok leute, bevor jetzt hier eine schlägerei ausbricht...
es geht darum: in tar-dateien (bekannt von linux oder tar.gz oder tar.bz2 dateien) ist die dateigröße in oktal und als string gespeichert.
wenn ich den string in eine zahl (z.b. int) umwandle, was ja mit der c-stdlib möglich ist, hab ich also nur noch diese zahl.
ich hab also am ende:
filesize_octal=123 // fantasiewert
das heißt aber nicht, dass die datei 123 bytes groß ist, sondern in wiklichkeit nur 83 bytes.
so meinte ich das.
-
Du hast also ein (nullterminiertes) Char-Array, in dem die Oktalschreibweise von einem Integerwert abgelegt ist.
Dann sag das doch von Anfang an.
Dann nimmst du sscanf mit %o als Formatspecifier oder strtol mit 8 als Basis.
-
danke.