C et octal

Le
unbewusst
j'ai une extension C pour Ruby qui gère les permissions de fichier.

les perms peuvent être entrées sous forme octal, par exemple 0755, le
premier 0 signifiant qu'on a affaire à de l'octal et pas à du décimal,
comme on peut ble faire avec une constante en C.


MAIS peut-on faire la même chose en retour d'une fonction ???

j'ai une fonction, disons int2oct(int uneValeur)

qui me retourne cette valeur codée en octal MAIS, comme je suis en int
aussi à la sortie je n'ai pas le premier "0" qui signifie octal, c'est
dommage cosmétiquement parlant


y a t'il donc un moyen de forcer ce zero tout en retournant une valeur
exploitable comme octal ?

ou, est-ce que je ne puis que sortir cette valeur qu'en string ???
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Eric Levenez
Le #999574
Le 21/08/07 18:04, dans

j'ai une extension C pour Ruby qui gère les permissions de fichier.

les perms peuvent être entrées sous forme octal, par exemple 0755, le
premier 0 signifiant qu'on a affaire à de l'octal et pas à du décimal,
comme on peut ble faire avec une constante en C.


MAIS peut-on faire la même chose en retour d'une fonction ???

j'ai une fonction, disons int2oct(int uneValeur)

qui me retourne cette valeur codée en octal MAIS, comme je suis en int
aussi à la sortie je n'ai pas le premier "0" qui signifie octal, c'est
dommage cosmétiquement parlant...


y a t'il donc un moyen de forcer ce zero tout en retournant une valeur
exploitable comme octal ?



D'après ce que tu n'expliques pas tu as transformé dans ta fonction la
valeur en pseudo-octal, et ainsi la valeur 0755 (493 en décimal) a été
transformée en 01363 (755 en décimal).

En un mot : whaooo !

En interne un nombre n'est ni en entier, ni en octal, c'est une valeur
binaire. C'est à l'affichage que tu peux afficher la valeur dans la base que
tu veux. Tu prends le problème d'un mauvais côté.

ou, est-ce que je ne puis que sortir cette valeur qu'en string ???


C'est quoi une "string" ?

Mais pourquoi donc tu ne fais pas l'affichage dans la base que tu veux au
moment de l'affichage, tu ne voudrais quand même pas traiter un nombre comme
une chaîne de caractères, hein ?

--
Éric Lévénez -- Unix is not only an OS, it's a way of life.

Pierre Maurette
Le #999572
j'ai une extension C pour Ruby qui gère les permissions de fichier.

les perms peuvent être entrées sous forme octal, par exemple 0755, le
premier 0 signifiant qu'on a affaire à de l'octal et pas à du décimal,
comme on peut ble faire avec une constante en C.


MAIS peut-on faire la même chose en retour d'une fonction ???

j'ai une fonction, disons int2oct(int uneValeur)

qui me retourne cette valeur codée en octal MAIS, comme je suis en int
aussi à la sortie je n'ai pas le premier "0" qui signifie octal, c'est
dommage cosmétiquement parlant...


y a t'il donc un moyen de forcer ce zero tout en retournant une valeur
exploitable comme octal ?

ou, est-ce que je ne puis que sortir cette valeur qu'en string ???


Imaginez que vous ayez 10 moutons (le 10 ou dix du langage courant).
Vous pouvez écrire à un ami informaticien que vos 10 bestioles, vos 012
bêtes ou vos 0xA ovins vont bien, vous en avez toujours dix.

Donc, décimal, octal, hexadécimal(*), ce sont des façons d'écrire la
même chose. Donc la même quantité sera représentée en décimal, octal,
hexadécimal par une chaîne de caratère différente.

int, unsigned, long, etc., ça définit un type, ici de nombre entier.
Divers types, différents par la taille de la donnée, c'est à dire
l'étendue de sa représentation, et par l'indication du fait qu'il
faudra l'interpréter comme une valeur possiblement négative ou alors
toujours positive ou nulle. Ce type est peu important dans le cas des
moutons, simplement un unsigned long long peut vous permettre
d'envisager des troupeaux nationnaux, un type signé de faire de la
comptabilité.

Vous aurez sans doute des réponses de gars qui travaillèrent réellement
dans l'octal, ce qui ne fut pratiquement jamais mon cas. En attendant
je vous suggère de regarder le code qui suit avec une bonne doc (ou
Google) à coté de vous. Je précise que les printf() peuvent se
transformer en sprintf() ou snprintf() pour "nourrir" une chaîne de
caractère plutôt que l'imprimer. Je considère également que la saisie
vous renverra une chaîne de caractères que vous nettoierez.

#include #include
int main (void)
{
unsigned a = 010, b = 10;
printf("%d 0%on%d 0%on", a, a, b, b);
a = strtoul("012", NULL, 8);
b = strtoul("012", NULL, 0);
printf("%d 0%on%d 0%on", a, a, b, b);
a = strtoul("12", NULL, 8);
b = strtoul("12", NULL, 0);
printf("%d 0%on%d 0%on", a, a, b, b);
a = strtoul("012", NULL, 8);
b = strtoul("012", NULL, 10);
printf("%d 0%on%d 0%on", a, a, b, b);
a = strtoul("12", NULL, 8);
b = strtoul("12", NULL, 10);
printf("%d 0%on%d 0%on", a, a, b, b);
return EXIT_SUCCESS;
}

(*) J'aurais pu ajouter le binaire, ce n'aurait pas été une erreur.
Mais un peu confusant, parce que le binaire correspond aussi à la
représentation interne des quantités dans les machines qui nous
intéressent, et on ne peut en faire abstraction. Base 2 et base 13,
c'est exactement pareil pour un mathématicien, mais pas du tout pour
nous.

--
Pierre Maurette

unbewusst
Le #996427
On 21 août, 20:12, Pierre Maurette





j'ai une extension C pour Ruby qui gère les permissions de fichier.

les perms peuvent être entrées sous forme octal, par exemple 0755, le
premier 0 signifiant qu'on a affaire à de l'octal et pas à du déc imal,
comme on peut ble faire avec une constante en C.

MAIS peut-on faire la même chose en retour d'une fonction ???

j'ai une fonction, disons int2oct(int uneValeur)

qui me retourne cette valeur codée en octal MAIS, comme je suis en int
aussi à la sortie je n'ai pas le premier "0" qui signifie octal, c'est
dommage cosmétiquement parlant...

y a t'il donc un moyen de forcer ce zero tout en retournant une valeur
exploitable comme octal ?

ou, est-ce que je ne puis que sortir cette valeur qu'en string ???


Imaginez que vous ayez 10 moutons (le 10 ou dix du langage courant).
Vous pouvez écrire à un ami informaticien que vos 10 bestioles, vos 0 12
bêtes ou vos 0xA ovins vont bien, vous en avez toujours dix.


ben oui, merci, je sais cela, ce n'ai pas la question posée, il me
semble, je disais l'avoir faite cette conversion dont j'ai besoin...

excepté le premier 0 qui signifie octal. je ne fais cela en retour
d'une fonction que pour être vohérent avec l'appel d'une autre
function qui lui prend un nombre codé en octal, en ce qui concerne les
perms de fichiers, c'est le plus parlant, une habitude prise.

Donc, décimal, octal, hexadécimal(*), ce sont des façons d'écrire la
même chose. Donc la même quantité sera représentée en décimal , octal,
hexadécimal par une chaîne de caratère différente.

int, unsigned, long, etc., ça définit un type, ici de nombre entier.
Divers types, différents par la taille de la donnée, c'est à dire
l'étendue de sa représentation, et par l'indication du fait qu'il
faudra l'interpréter comme une valeur possiblement négative ou alors
toujours positive ou nulle. Ce type est peu important dans le cas des
moutons, simplement un unsigned long long peut vous permettre
d'envisager des troupeaux nationnaux, un type signé de faire de la
comptabilité.

Vous aurez sans doute des réponses de gars qui travaillèrent réelle ment
dans l'octal, ce qui ne fut pratiquement jamais mon cas. En attendant
je vous suggère de regarder le code qui suit avec une bonne doc (ou
Google) à coté de vous. Je précise que les printf() peuvent se
transformer en sprintf() ou snprintf() pour "nourrir" une chaîne de
caractère plutôt que l'imprimer.



c'est l'info qu'il me fallait et que je ne connaissais pas merci !


Je considère également que la saisie
vous renverra une chaîne de caractères que vous nettoierez.

#include #include
int main (void)
{
unsigned a = 010, b = 10;
printf("%d 0%on%d 0%on", a, a, b, b);
a = strtoul("012", NULL, 8);
b = strtoul("012", NULL, 0);
printf("%d 0%on%d 0%on", a, a, b, b);
a = strtoul("12", NULL, 8);
b = strtoul("12", NULL, 0);
printf("%d 0%on%d 0%on", a, a, b, b);
a = strtoul("012", NULL, 8);
b = strtoul("012", NULL, 10);
printf("%d 0%on%d 0%on", a, a, b, b);
a = strtoul("12", NULL, 8);
b = strtoul("12", NULL, 10);
printf("%d 0%on%d 0%on", a, a, b, b);
return EXIT_SUCCESS;

}

(*) J'aurais pu ajouter le binaire, ce n'aurait pas été une erreur.
Mais un peu confusant, parce que le binaire correspond aussi à la
représentation interne des quantités dans les machines qui nous
intéressent, et on ne peut en faire abstraction. Base 2 et base 13,
c'est exactement pareil pour un mathématicien, mais pas du tout pour
nous.




Pascal Bourguignon
Le #996426
unbewusst
On 21 août, 20:12, Pierre Maurette





j'ai une extension C pour Ruby qui gère les permissions de fichier.

les perms peuvent être entrées sous forme octal, par exemple 0755, le
premier 0 signifiant qu'on a affaire à de l'octal et pas à du décimal,
comme on peut ble faire avec une constante en C.

MAIS peut-on faire la même chose en retour d'une fonction ???

j'ai une fonction, disons int2oct(int uneValeur)

qui me retourne cette valeur codée en octal MAIS, comme je suis en int
aussi à la sortie je n'ai pas le premier "0" qui signifie octal, c'est
dommage cosmétiquement parlant...

y a t'il donc un moyen de forcer ce zero tout en retournant une valeur
exploitable comme octal ?

ou, est-ce que je ne puis que sortir cette valeur qu'en string ???


Imaginez que vous ayez 10 moutons (le 10 ou dix du langage courant).
Vous pouvez écrire à un ami informaticien que vos 10 bestioles, vos 012
bêtes ou vos 0xA ovins vont bien, vous en avez toujours dix.


ben oui, merci, je sais cela, ce n'ai pas la question posée, il me
semble, je disais l'avoir faite cette conversion dont j'ai besoin...

excepté le premier 0 qui signifie octal. je ne fais cela en retour
d'une fonction que pour être vohérent avec l'appel d'une autre
function qui lui prend un nombre codé en octal, en ce qui concerne les
perms de fichiers, c'est le plus parlant, une habitude prise.


Donc, tu n'as rien compris, et tu ne sais pas cela.

.....
..... = dix = 1*dix + 0*unité = 10 (en base dix)
= 1*huit + 2*unité = 12 (en base huit)
= 0*seize + dix*unité = A (en base seize)
= 1*huit + 0*quatre + 1*deux + 0*unité = 1010 (en base deux).


Les fonctions n'attendent pas un "nombre codé en octal", ÇA NE VEUT RIEN DIRE!

Un nombre est un nombre.

"octal", "décimal", etc sont des représentations particulières qu'on
utilise pour _REPRESENTER_ des nombres, c'est à dire pour écrire les
nombres avec des caractères, que ce soit dans les sources des
programmes, dans les commandes, ou dans des chaînes de caractères.


Tu peux écrire le nombre de n'importe quelle manière. Quand tu veux
créer un fichier avec les droits en lecture-écriture pour le
propriétaire, le groupe et les autres, tu dois passer quatre cent
trente huit, quelque soit la représentation avec laquelle tu écris ce
nombre.


Vois comment chaque appel à creat:

int f(){
int res;
res=creat("file",0666);
res=creat("file",438);
res=creat("file",0x1b6);
res=creat("file",73*3*2);
}

se compile exactement de la même manière:

.file "a.c"
.section .rodata
.LC0:
.string "file"
.text
.globl f
.type f, @function
f:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
movl $438, 4(%esp)
movl $.LC0, (%esp)
call creat
movl %eax, -4(%ebp)
movl $438, 4(%esp)
movl $.LC0, (%esp)
call creat
movl %eax, -4(%ebp)
movl $438, 4(%esp)
movl $.LC0, (%esp)
call creat
movl %eax, -4(%ebp)
movl $438, 4(%esp)
movl $.LC0, (%esp)
call creat
movl %eax, -4(%ebp)
leave
ret
.size f, .-f
.ident "GCC: (GNU) 4.1.2 (Gentoo 4.1.2 p1.0.1)"
.section .note.GNU-stack,"",@progbits


--
__Pascal Bourguignon__ http://www.informatimago.com/

NOTE: The most fundamental particles in this product are held
together by a "gluing" force about which little is currently known
and whose adhesive power can therefore not be permanently
guaranteed.



unbewusst
Le #996425
On 22 août, 12:41, Pascal Bourguignon
unbewusst
On 21 août, 20:12, Pierre Maurette
j'ai une extension C pour Ruby qui gère les permissions de fichier.

les perms peuvent être entrées sous forme octal, par exemple 075 5, le
premier 0 signifiant qu'on a affaire à de l'octal et pas à du d écimal,
comme on peut ble faire avec une constante en C.

MAIS peut-on faire la même chose en retour d'une fonction ???

j'ai une fonction, disons int2oct(int uneValeur)

qui me retourne cette valeur codée en octal MAIS, comme je suis en int
aussi à la sortie je n'ai pas le premier "0" qui signifie octal, c 'est
dommage cosmétiquement parlant...

y a t'il donc un moyen de forcer ce zero tout en retournant une vale ur
exploitable comme octal ?

ou, est-ce que je ne puis que sortir cette valeur qu'en string ???


Imaginez que vous ayez 10 moutons (le 10 ou dix du langage courant).
Vous pouvez écrire à un ami informaticien que vos 10 bestioles, vo s 012
bêtes ou vos 0xA ovins vont bien, vous en avez toujours dix.


ben oui, merci, je sais cela, ce n'ai pas la question posée, il me
semble, je disais l'avoir faite cette conversion dont j'ai besoin...

excepté le premier 0 qui signifie octal. je ne fais cela en retour
d'une fonction que pour être vohérent avec l'appel d'une autre
function qui lui prend un nombre codé en octal, en ce qui concerne les
perms de fichiers, c'est le plus parlant, une habitude prise.


Donc, tu n'as rien compris, et tu ne sais pas cela.

.....
..... = dix = 1*dix + 0*unité = 10 (en base dix)
= 1*huit + 2*unité = 12 (en base huit)
= 0*seize + dix*unité = A (en base seize)
= 1*huit + 0*quatre + 1*deux + 0*unité = 1010 (en base deux).

Les fonctions n'attendent pas un "nombre codé en octal", ÇA NE VEUT R IEN DIRE!


ben en Ruby SI !

si j'applique 755 à la fonction qui gère les perms, 755 sera compris
comme du décimal alors que 0755 sera compris comme une représentation
octale (*).

l'octal, en ce qui concerne les perms permet de mieux voir ce que
représente l'octal, c'est plus parlant qu'en décimal c'est tout ce
que je veux dire...

cette "représentation est entrée sous forme de nombre 0755 et non pas
de string "0755"....

donc là, avec C, je ne peux sortir qu'une représentation octale *** en
string *** du dit nombre.




Pierre Maurette
Le #996424
[...]
ben en Ruby SI !

si j'applique 755 à la fonction qui gère les perms, 755 sera compris
comme du décimal alors que 0755 sera compris comme une représentation
octale (*).

l'octal, en ce qui concerne les perms permet de mieux voir ce que
représente l'octal, c'est plus parlant qu'en décimal c'est tout ce
que je veux dire...

cette "représentation est entrée sous forme de nombre 0755 et non pas
de string "0755"....

donc là, avec C, je ne peux sortir qu'une représentation octale *** en
string *** du dit nombre.


J'ai tout oublié de Ruby. Mais sur ce point, c'est strictement la même
chose que C.
Quand vous écrivez fonction(755), le compilateur C et l'interpréteur
(?) Ruby lisent la chaîne "755" dans le code source et envoient 755 à
la fonction. Quand vous écrivez fonction(0755), compilateur C et
interpréteur Ruby lisent la chaîne "0755" dans le code source et
envoient 493 à la fonction.
755 et 0755 sont des constantes littérales. La première vaut 755, la
seconde 493.
Revoyez éventuellement l'histoire des moutons...

--
Pierre Maurette

Pascal Bourguignon
Le #996423
unbewusst
On 22 août, 12:41, Pascal Bourguignon
unbewusst
On 21 août, 20:12, Pierre Maurette
j'ai une extension C pour Ruby qui gère les permissions de fichier.

les perms peuvent être entrées sous forme octal, par exemple 0755, le
premier 0 signifiant qu'on a affaire à de l'octal et pas à du décimal,
comme on peut ble faire avec une constante en C.

MAIS peut-on faire la même chose en retour d'une fonction ???

j'ai une fonction, disons int2oct(int uneValeur)

qui me retourne cette valeur codée en octal MAIS, comme je suis en int
aussi à la sortie je n'ai pas le premier "0" qui signifie octal, c'est
dommage cosmétiquement parlant...

y a t'il donc un moyen de forcer ce zero tout en retournant une valeur
exploitable comme octal ?

ou, est-ce que je ne puis que sortir cette valeur qu'en string ???


Imaginez que vous ayez 10 moutons (le 10 ou dix du langage courant).
Vous pouvez écrire à un ami informaticien que vos 10 bestioles, vos 012
bêtes ou vos 0xA ovins vont bien, vous en avez toujours dix.


ben oui, merci, je sais cela, ce n'ai pas la question posée, il me
semble, je disais l'avoir faite cette conversion dont j'ai besoin...

excepté le premier 0 qui signifie octal. je ne fais cela en retour
d'une fonction que pour être vohérent avec l'appel d'une autre
function qui lui prend un nombre codé en octal, en ce qui concerne les
perms de fichiers, c'est le plus parlant, une habitude prise.


Donc, tu n'as rien compris, et tu ne sais pas cela.

.....
..... = dix = 1*dix + 0*unité = 10 (en base dix)
= 1*huit + 2*unité = 12 (en base huit)
= 0*seize + dix*unité = A (en base seize)
= 1*huit + 0*quatre + 1*deux + 0*unité = 1010 (en base deux).

Les fonctions n'attendent pas un "nombre codé en octal", ÇA NE VEUT RIEN DIRE!


ben en Ruby SI !

si j'applique 755 à la fonction qui gère les perms, 755 sera compris
comme du décimal alors que 0755 sera compris comme une représentation
octale (*).


Si tu veux passer à cette fonction le nombre quatre cent quatre vingt
treize, tu as trente six manières de le faire. Mais ne vas pas lui
donner sept cent cinquante cinq!!!


l'octal, en ce qui concerne les perms permet de mieux voir ce que
représente l'octal, c'est plus parlant qu'en décimal c'est tout ce
que je veux dire...



Ce n'est pas parlant du tout! ;-)


Ce qui est parlant, ce sont les symboles:

enum {r=4,w=2,x=1} right;
enum {u00,g0,o=1} access;

chmod(file,u*(r+w)+g*(r+w)+o*r);

ou bien:

chmod(file,parse_mode("u=rw,g=rw,o=r"));


cette "représentation est entrée sous forme de nombre 0755 et non pas
de string "0755"....

donc là, avec C, je ne peux sortir qu'une représentation octale *** en
string *** du dit nombre.




--
__Pascal Bourguignon__ http://www.informatimago.com/

NOTE: The most fundamental particles in this product are held
together by a "gluing" force about which little is currently known
and whose adhesive power can therefore not be permanently
guaranteed.





Eric Levenez
Le #996422
Le 22/08/07 16:33, dans « Pascal Bourguignon »
Ce qui est parlant, ce sont les symboles:

enum {r=4,w=2,x=1} right;
enum {u00,g0,o=1} access;

chmod(file,u*(r+w)+g*(r+w)+o*r);

ou bien:

chmod(file,parse_mode("u=rw,g=rw,o=r"));


Ou ce que préconise la norme Posix, c'est-à-dire utiliser les defines prévus
à cet effet. Pour le 0755 cela donne :

chmod(S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);

Le codage en décimal, octal ou hexadécimal des defines n'a aucune influence
sur l'utilisation des defines.

--
Éric Lévénez -- Unix is not only an OS, it's a way of life.

unbewusst
Le #996267
On 22 août, 16:33, Pascal Bourguignon
unbewusst
On 22 août, 12:41, Pascal Bourguignon
unbewusst
On 21 août, 20:12, Pierre Maurette
j'ai une extension C pour Ruby qui gère les permissions de fich ier.

les perms peuvent être entrées sous forme octal, par exemple 0755, le
premier 0 signifiant qu'on a affaire à de l'octal et pas à du décimal,
comme on peut ble faire avec une constante en C.

MAIS peut-on faire la même chose en retour d'une fonction ???

j'ai une fonction, disons int2oct(int uneValeur)

qui me retourne cette valeur codée en octal MAIS, comme je suis en int
aussi à la sortie je n'ai pas le premier "0" qui signifie octal , c'est
dommage cosmétiquement parlant...

y a t'il donc un moyen de forcer ce zero tout en retournant une v aleur
exploitable comme octal ?

ou, est-ce que je ne puis que sortir cette valeur qu'en string ???


Imaginez que vous ayez 10 moutons (le 10 ou dix du langage courant).
Vous pouvez écrire à un ami informaticien que vos 10 bestioles, vos 012
bêtes ou vos 0xA ovins vont bien, vous en avez toujours dix.


ben oui, merci, je sais cela, ce n'ai pas la question posée, il me
semble, je disais l'avoir faite cette conversion dont j'ai besoin...

excepté le premier 0 qui signifie octal. je ne fais cela en retour
d'une fonction que pour être vohérent avec l'appel d'une autre
function qui lui prend un nombre codé en octal, en ce qui concerne les
perms de fichiers, c'est le plus parlant, une habitude prise.


Donc, tu n'as rien compris, et tu ne sais pas cela.

.....
..... = dix = 1*dix + 0*unité = 10 (en base dix)
= 1*huit + 2*unité = 12 (en base huit)
= 0*seize + dix*unité = A (en base seize)
= 1*huit + 0*quatre + 1*deux + 0*unité = 1010 (en b ase deux).

Les fonctions n'attendent pas un "nombre codé en octal", ÇA NE VEU T RIEN DIRE!


ben en Ruby SI !

si j'applique 755 à la fonction qui gère les perms, 755 sera compris
comme du décimal alors que 0755 sera compris comme une représentati on
octale (*).


Si tu veux passer à cette fonction le nombre quatre cent quatre vingt
treize, tu as trente six manières de le faire. Mais ne vas pas lui
donner sept cent cinquante cinq!!!

l'octal, en ce qui concerne les perms permet de mieux voir ce que
représente l'octal, c'est plus parlant qu'en décimal c'est tout ce
que je veux dire...


Ce n'est pas parlant du tout! ;-)

Ce qui est parlant, ce sont les symboles:

enum {r=4,w=2,x=1} right;
enum {u00,g0,o=1} access;

chmod(file,u*(r+w)+g*(r+w)+o*r);

ou bien:

chmod(file,parse_mode("u=rw,g=rw,o=r"));



OK ok ;-)






Antoine Leca
Le #996262
En news:,
unbewusst va escriure:
Les fonctions n'attendent pas un "nombre codé en octal", ÇA NE VEUT
RIEN DIRE!


ben en Ruby SI !


Bin non.

Ruby est un langage. Il est mis en ½uvre par un compilateur (ou un
interpréteur, peu importe). Ce programme (car c'est un programme) lis du
TEXTE et le traduit éventuellement en nombre pour pouvoir savoir quoi faire
avec. Donc au départ de l'action, il y a une primitive d'interprétation des
nombres (strtol en C), qui a pour convention qu'un nombre sans . est un
entier, que s'il est précédé de 0x ($ en TurboPascal, &H en BasicMS, suivi
de h en assembleur Intel) il est en base 16, s'il est précédé de 0 (&O en
BasicMS, suivi de o ou q en assembleur Intel) il est en base 8, et par
défaut il est en base 10.

La primitive inverse (de nombre à texte) est obtenue par s[n]printf() en C.


si j'applique 755 à la fonction qui gère les perms, 755 sera compris
comme du décimal alors que 0755 sera compris comme une représentation
octale (*).


Non.
Le compilateur (Ruy ou C) lis

fonction_qui_gère_les_perms(0755)

FAIT UN DÉCOUPAGE LEXICAL (exactement comme toi en lisant ce post), qui
donne quatre lexèmes (mots), à savoir "fonction_qui_gère_les_perms", "(",
"0755" et ")" (les guillemets rappelent qu'il s'agit à ce stade de chaînes
de caractères), les identifie respectivement comme identificateur,
parenthèse ouvrante, entier et parenthèse fermante, analyse SÉMANTIQUEMENT
(comme toi encore une fois) le groupe comme un appel de fonction avec un
paramètre, vérifie la concordance du type, et... TRADUIT la chaîne "0755" en
un nombre.

En appliquant la règle ci-dessus.


l'octal, en ce qui concerne les perms permet de mieux voir ce que
représente l'octal, c'est plus parlant qu'en décimal c'est tout ce
que je veux dire...


Voui. Ce que tu veux dire, c'est que quand tu veux lire des «permissions»,
plutôt que d'utiliser l'adresse de la case mémoire qui contient
l'information en question, tu voudrais utiliser une représentation en octal
du nombre contenu dans cette mémoire.

Et manque de bol, la fonction (prédéterminée et implicite) pour faire cela,
dans ton cas, fait seulement une traduction vers la base 10.

En fait, ton problème se résume à trouver où se trouve cette fonction
prédéterminée (impossible à dire sans avoir vu la moindre ligne de code ni
connaître ton environnement), et à agir sur elle pour la forcer à écrire en
base 8.

Ce qui va supposer utiliser sprintf().


Antoine


Publicité
Poster une réponse
Anonyme