[Visual c++] convertir une taille en Octet automatiquement

convertir une taille en Octet automatiquement [Visual c++] - C++ - Programmation

Marsh Posté le 02-04-2004 à 16:43:09    

bonjour,
je cherche une fonction qui existe deja qui peut me convertir une taille donnée en Octet en la taille la plus appropriée (Ko, Mo, Go) un peu comme l'affichage d'explorateur windows.
En gros
je donne 500 en parametre elle me donne 500 Octets
je donne 10240 en paramentre elle me donne 10 Ko
 
Ou bien je cherche l'idée de conversion qui s'approche le plus de l'explorateur windows
 
merci pour vos reponses


Message édité par th3r1ddl3r le 02-04-2004 à 17:07:18
Reply

Marsh Posté le 02-04-2004 à 16:43:09   

Reply

Marsh Posté le 02-04-2004 à 17:05:43    

th3r1ddl3r a écrit :

bonjour,
je cherche une fonction qui existe deja qui peut me convertir une taille donnée en Octet en la taille la plus appropriée (Ko, Mo, Go) un peu comme l'affichage d'explorateur windows.
En gros
je donne 500 en parametre elle me donne 500 Octets
je donne 10240 en paramentre elle me donne 10 Mo
 
Ou bien je cherche l'idée de conversion qui s'approche le plus de l'explorateur windows
 
merci pour vos reponses


Si elle fait ça, il est clair qu'elle est buggée.
A+,

Reply

Marsh Posté le 02-04-2004 à 17:07:49    

gilou a écrit :


Si elle fait ça, il est clair qu'elle est buggée.
A+,


a bon et pourquoi ca?

Reply

Marsh Posté le 02-04-2004 à 17:09:12    

th3r1ddl3r a écrit :


a bon et pourquoi ca?


parce que 10 Mo == 10 485 Ko :o


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 02-04-2004 à 17:13:06    

Harkonnen a écrit :


parce que 10 Mo == 10 485 Ko :o


 :non: 1Mo=1077Ko, mais attention 1Ko=1069o :)


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 02-04-2004 à 17:13:50    

Harkonnen a écrit :


parce que 10 Mo == 10 485 Ko :o


chez moi 10 Mo == 10 240 Ko
et 10 Ko == 10 240 Octets
peut etre qu'on parle pas la meme langue?

Reply

Marsh Posté le 02-04-2004 à 17:17:23    

th3r1ddl3r a écrit :


chez moi 10 Mo == 10 240 Ko
et 10 Ko == 10 240 Octets
peut etre qu'on parle pas la meme langue?


 
t'as tout compris, le reste c'est du flan :o


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 02-04-2004 à 17:19:54    

schnapsmann a écrit :


 
t'as tout compris, le reste c'est du flan :o  


bon en gros a part floodez vous etes un peu inutile car vous pouvez pas repondre a ma question.......

Reply

Marsh Posté le 02-04-2004 à 17:21:27    

th3r1ddl3r a écrit :


a bon et pourquoi ca?


Ben par ce qui si 500 ca te donne 500 Octets, alors 10240 ca doit te donner (avec l'arrondissement souhaite) 10 Ko et pas 10 Mo...
A+,

Reply

Marsh Posté le 02-04-2004 à 17:22:20    

th3r1ddl3r a écrit :


bon en gros a part floodez vous etes un peu inutile car vous pouvez pas repondre a ma question.......


[:kiki]
500 => 500 octets
10240 => 10 Mo
 
Si pour toi 10240 octets = 10 Mo alors c'est que t'as pas tout bien pigé :D
 
EDIT : grillaid par gilou [:sisicaivrai]


Message édité par Taiche le 02-04-2004 à 17:22:35

---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 02-04-2004 à 17:22:20   

Reply

Marsh Posté le 02-04-2004 à 17:22:42    

gilou a écrit :


Ben par ce qui si 500 ca te donne 500 Octets, alors 10240 ca doit te donner (avec l'arrondissement souhaite) 10 Ko et pas 10 Mo...
A+,
 


serieux t lourd relis mon post

Reply

Marsh Posté le 02-04-2004 à 17:24:13    

th3r1ddl3r a écrit :


serieux t lourd relis mon post


Citation :

--Message édité par th3r1ddl3r le 02-04-2004 à 17:07:18--


Genre [:kiki]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 02-04-2004 à 17:25:06    

th3r1ddl3r a écrit :


serieux t lourd relis mon post

Ben t'as peut etre edité ton post, mais ca laisse des traces...
Et je viens juste de repondre a ta question, car j'etais parti ailleurs.
A+,

Reply

Marsh Posté le 02-04-2004 à 17:26:15    

Taiche a écrit :


Citation :

--Message édité par th3r1ddl3r le 02-04-2004 à 17:07:18--


Genre [:kiki]


 
ca t'arrive jamais de faire une faute de frappe.. elle a été corrigée 1 post après... alors faites un peu un effort..

Reply

Marsh Posté le 02-04-2004 à 17:30:07    

th3r1ddl3r a écrit :


 
ca t'arrive jamais de faire une faute de frappe.. elle a été corrigée 1 post après... alors faites un peu un effort..


Peut etre, mais il y avait un post entre deux, le mien. Alors si tu demandes pourquoi dans ton post d'apres, alors que j'avais mis l'erreur en rouge, et qu'en plus, selon tes dires, c'etait corrigé, alors tu es soit malcomprenant, soit daltonien.
A+,

Reply

Marsh Posté le 02-04-2004 à 17:30:34    

th3r1ddl3r a écrit :


ca t'arrive jamais de faire une faute de frappe.. elle a été corrigée 1 post après... alors faites un peu un effort..


C'était trop dur de dire à gilou "ah OK, j'avais fait une erreur, j'ai édité" ? Au lieu de ça, tu laisses la confusion s'installer sur 10 posts et tu t'en plains.
Pis à ton avis, c'est à qui de faire des efforts ?


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 02-04-2004 à 17:54:35    

Bon, on va pas polémiquer 107 ans !
auteur du topic dont j'ai pas envie de déchiffrer le pseudo >> ta fonction est toute con !  
- tu prends la taille en octets
- si elle est <= 1024, alors tu l'affiches telle quelle
- sinon si elle est > 1024 et <= 1024 * 1024, alors tu la divises par 1024 et tu affiches le résultat
- etc...
 
ça prend 10 secondes à faire


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 02-04-2004 à 18:53:54    

Arf! En plus l'auteur du topic en demande la moderation, apparement sans avoir vu que j'etais modo ici...
Je sens que je vais lui decerner le titre (oh combien convoité) de boolaÿ du mois.
A+,
PS. En plus, comme dirait TAZ, ca fout quoi a la section C++ :whistle:


Message édité par gilou le 02-04-2004 à 18:55:17
Reply

Marsh Posté le 02-04-2004 à 18:55:02    

gilou a écrit :

Arf! En plus l'auteur du topic en demande la moderation, apparement sans avoir vu que j'etais modo ici...
Je sens que je vais lui decerner le titre (oh combien convoité) de boolaÿ du mois.
A+,


Il le mérite, il en a ouvert un autre avec le même énoncé (corrigé bien sur) [:ddr555]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 02-04-2004 à 18:56:04    

Harkonnen a écrit :


Il le mérite, il en a ouvert un autre avec le même énoncé (corrigé bien sur) [:ddr555]

Rhooo poutaing! [:rofl] [:rofl] [:rofl]
A+,

Reply

Marsh Posté le 22-11-2004 à 20:54:19    

Harkonnen a écrit :

Bon, on va pas polémiquer 107 ans !
auteur du topic dont j'ai pas envie de déchiffrer le pseudo >> ta fonction est toute con !  
- tu prends la taille en octets
- si elle est <= 1024, alors tu l'affiches telle quelle
- sinon si elle est > 1024 et <= 1024 * 1024, alors tu la divises par 1024 et tu affiches le résultat
- etc...
 
ça prend 10 secondes à faire


 
Mais il y a probleme la dedans, non ?
 

Code :
  1. AnsiString TForm1::convert(unsigned a)
  2. {
  3. unsigned e,d;
  4. AnsiString tmp="";
  5. if(a <= 1024)
  6.     tmp= a + " octets" ;
  7. else
  8.    { if( a > 1024 && a <= 1024*1024)
  9.       {
  10.        e = a /1024; d = a%1024;
  11.        tmp= e; tmp+= "," ;tmp+= d; tmp+= " Ko" ;
  12.       }
  13.      else
  14.       {
  15.         if( a > 1024*1024 && a <= 1024*1024*1024)
  16.           {
  17.            e = a /(1024*1024); d = a%(1024*1024);
  18.            tmp= e;tmp+= "," ;tmp+= d ;tmp+= " Mo" ;
  19.           }
  20.         else
  21.           {
  22.            e = a /(1024*1024*1024); d = a%(1024*1024*1024);
  23.            tmp= e;tmp+= "," ;tmp+= d;tmp+= " Go" ;
  24.           }
  25.       }
  26.     }
  27.   return  tmp;
  28. }


 
C'est vraiment codé n'importe comment :p


---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
Reply

Marsh Posté le 22-11-2004 à 20:55:22    

gnome_vfs_format_file_size_for_display

Reply

Marsh Posté le 22-11-2004 à 21:10:22    

Taz a écrit :

gnome_vfs_format_file_size_for_display


tjs fidèle à toi même....


---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
Reply

Marsh Posté le 22-11-2004 à 21:12:28    

je sais pas moi, y a tous les kadors là et vous bataillez sur l'algo ...
 
je vous montre juste un exemple de solution simple (et avec i18n ;)


Message édité par Taz le 22-11-2004 à 21:12:59
Reply

Marsh Posté le 22-11-2004 à 22:01:14    

1 ko = 1000 octets bande de nazes :o


---------------
Un matin je me lèverai et il fera beau.
Reply

Marsh Posté le 23-11-2004 à 12:27:32    

1ko = 1024 octets ...


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 23-11-2004 à 12:28:32    

BlackGoddess a écrit :

1ko = 1024 octets ...


Pas depuis 1998. C'est un kibioctet qui fait 1024 octets.

Reply

Marsh Posté le 23-11-2004 à 12:29:56    

ah ??? je n'étais pas au courant ... bizarre pourtant windows 2000 par exemple (sorti apres 1998 je crois) n'est pas au courant non plus
 
edit : plus d'infos :
http://forum.hardware.fr/hardwaref [...] 7363-1.htm


Message édité par blackgoddess le 23-11-2004 à 12:32:46

---------------
-( BlackGoddess )-
Reply

Marsh Posté le 23-11-2004 à 12:33:51    

Code :
  1. AnsiString TForm1::convert(unsigned a)
  2. {
  3. unsigned e,d;
  4. unsigned taille = 1000;
  5. AnsiString tmp="";
  6. if(a <= taille)
  7.     tmp= a + " octets" ;
  8. else
  9.    { if( a > taille && a <= taille*taille)
  10.       {
  11.        e = a /taille; d = a%taille;
  12.        tmp= e; tmp+= "," ;tmp+= d; tmp+= " Ko" ;
  13.       }
  14.      else
  15.       {
  16.         if( a > taille*taille && a <= taille*taille*taille)
  17.           {
  18.            e = a /(taille*taille); d = (a%(taille*taille))/taille;
  19.            tmp= e;tmp+= "," ;tmp+= d ;tmp+= " Mo" ;
  20.           }
  21.         else
  22.           {
  23.            e = a /(taille*taille*taille); d =(a%(taille*taille*taille))/(taille*taille);
  24.            tmp= e;tmp+= "," ;tmp+= d;tmp+= " Go" ;
  25.           }
  26.       }
  27.     }
  28.   return  tmp;
  29. }


 
j'ai l'impression que au dessus de 4Go ca part totalement en vrille :(


---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
Reply

Marsh Posté le 23-11-2004 à 12:36:10    

BlackGoddess a écrit :

ah ??? je n'étais pas au courant ... bizarre pourtant windows 2000 par exemple (sorti apres 1998 je crois) n'est pas au courant non plus


Je sais, c'est pas clair cette histoire. C'est comme "au temps pour moi": tout le monde n'est pas encore au courant que ça fait 200 ans que c'est comme ça. :D
 
Bon, d'une part, va voir là:
http://forum.hardware.fr/hardwaref [...] 7363-1.htm
 
D'autre part, depuis 2-3 ans, tous les disques durs ou presque, ainsi que les clés USB utilisent cette capacité. C'est chiant, mais c'est comme ça. 200Mo veut dire 200 000 000 octets sur le disque.  
 
Windows n'est évidemment pas mis à jour parce que ça représente un gros changement. Pense seulement aux cris de rebellion qui sont apparus lorsque Windows 95 a été standardisé pour utiliser les mots "folders/dossiers" au lieu de "directory/répertoire". Alors imagine le choc lorsqu'il sera modifié pour utiliser des kio et de kiB.
 
Enfin, il n'y a effectivement aucune raison pour qu'un vieil usage désuet de nerds force un préfixe SI à avoir une valeur différente juste pour les bits et les bools.

Reply

Marsh Posté le 23-11-2004 à 12:38:41    

mmh ... pk tu réutilises pas a a chaque fois ? ca simplifierait les tests
 
si a<=1024 alors
   c bon
sinon
   a /= 1024
   si a<=1024 alors
...


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 23-11-2004 à 12:41:37    

BlackGoddess a écrit :

mmh ... pk tu réutilises pas a a chaque fois ? ca simplifierait les tests
 
si a<=1024 alors
   c bon
sinon
   a /= 1024
   si a<=1024 alors
...


Oui ca serait plus propre ;) là je recois donc la taille en octets, et je me demande si avec un disque de par exemple 30Go ( 30 000 000 000 octets alors +???) je ne dépasserais pas la capaticité du unsigned.


---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
Reply

Marsh Posté le 23-11-2004 à 12:43:30    

vi, pour les nombres supérieurs à 4go, l'unsigned tu oublies
 
c par exemple pour ca que c'est la limite de taille d'un fichier sur certains os


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 23-11-2004 à 12:46:19    

BlackGoddess a écrit :

vi, pour les nombres supérieurs à 4go, l'unsigned tu oublies
 
c par exemple pour ca que c'est la limite de taille d'un fichier sur certains os


Ah ok, merci, par exemple avec cette methode je souhaiterais afficher la taille d'un disque dur, j'ai donc cette taille en octets, qu'est ce que je peux utiliser a la place des unsigned. Si je ne fais pas d'erreur, les unsigned long int vont jusque 4 294 967 295. Ce qui est encore trop juste pour la taille d'un disque dur :(


Message édité par Le Veilleur le 23-11-2004 à 12:46:50

---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
Reply

Marsh Posté le 23-11-2004 à 12:47:26    

Lam's a écrit :

Enfin, il n'y a effectivement aucune raison pour qu'un vieil usage désuet de nerds force un préfixe SI à avoir une valeur différente juste pour les bits et les bools.


J'ai toujours trouvé ca stupide, les SI c'est de la base 10, son kilo = 10^3 ca a un sens
 
quand on part sur des bases 2 (le bit) ou 256 (l'octet) ca n'a plus aucun sens [:spamafote]  
(sans même parler de "kibibit", ignoble à l'oreille)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 23-11-2004 à 12:47:47    

bin un unsigned long long ou un unesigned __int64 suivant ton compilo


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 23-11-2004 à 12:54:12    

BlackGoddess a écrit :

bin un unsigned long long ou un unesigned __int64 suivant ton compilo


Citation :

Il est à noter que les types long long et unsigned long long ne font pas partie de C++ ni de C90. Ce sont des inventions de C99.


 
http://www.cmla.ens-cachan.fr/Util [...] s/C++/FAQ/
 
Borland C++ builder, me dit que j'ai mis un long en trop


---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
Reply

Marsh Posté le 23-11-2004 à 12:56:11    

Il te reste les unsigned long long. Mais de toute façon, il faut virer les (taille * taille) et les (taille * taille * taille) si tu veux éviter les overflows.

Reply

Marsh Posté le 23-11-2004 à 12:57:13    

el muchacho a écrit :

Il te reste les unsigned long long. Mais de toute façon, il faut virer les (taille * taille) et les (taille * taille * taille) si tu veux éviter les overflows.


Avec des unsigned __int64 cela fonctionne


---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
Reply

Marsh Posté le 23-11-2004 à 12:59:22    

Non, si tu as une taille qui est >= 2^32, taille*taille dépasse 2^64-1.


Message édité par el muchacho le 23-11-2004 à 12:59:43
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed