Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

API :CONVERTIR DES OCTETS EN KO,MO,GO EN FONCTION DE LA VALEUR


Information sur la source

Catégorie :API Classé sous : conversion, octet, byte Niveau : Débutant Date de création : 18/02/2006 Vu : 36 086

Note :
9,33 / 10 - par 3 personnes
9,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note


Description

A l'aide de l'api win32 StrFormatByteSize, il est possible de convertir des valeur exprimer en octés en kilo mega et gega octes, en fonction de la valeur.Exemple , 1024 -> 1,00 ko,9565656->9.12Mo.

 

Source

  • Private Declare Function StrFormatByteSize Lib "shlwapi" Alias "StrFormatByteSizeA" (ByVal dw As Long, ByVal pszBuf As String, ByVal cchBuf As Long) As Long
  • Private Sub form_load()
  • Dim mem As String
  • Dim lenmem As Long
  • Const valeur_en_octes As Single = 9565656 'changez la valeur ici
  • mem = Space$(32)'creer un buffer
  • lenmem = Len(mem)
  • If StrFormatByteSize(valeur_en_octes, mem, lenmem) <> 0 Then
  • MsgBox Trim$(mem)
  • End If
  • End Sub
Private Declare Function StrFormatByteSize Lib "shlwapi" Alias "StrFormatByteSizeA" (ByVal dw As Long, ByVal pszBuf As String, ByVal cchBuf As Long) As Long

Private Sub form_load()
Dim mem As String
Dim lenmem As Long
Const valeur_en_octes As Single = 9565656 'changez la valeur ici
    mem = Space$(32)'creer un buffer
    lenmem = Len(mem)
   
   If StrFormatByteSize(valeur_en_octes, mem, lenmem) <> 0 Then
                     
     MsgBox Trim$(mem)
   
   End If
   

End Sub

Commentaires et avis

signaler à un administrateur
Commentaire de SkyRocKo le 18/02/2006 16:45:19

Salut MasterHack,

Génial cet API ! Merci

10/10

signaler à un administrateur
Commentaire de SkyRocKo le 18/02/2006 22:51:23

J'ai essayé de reproduire cette fonction et voici le même code sans API à la diffèrence près que les valeurs sont arrondies à n décimales près, et non pas tronquées comme avec l'API.

Voici le code:

Public Function StrFormatByteSize(ByVal dw As Long, Optional NumDigitsAfterDecimal As Long = 2) As String
  Dim sValue As String
    Select Case (dw \ 1024)
        Case Is >= 1024000
            sValue = CStr(Round(dw / (1024 ^ 3), NumDigitsAfterDecimal)) & " Go"
        Case Is >= 1000
            sValue = CStr(Round(dw / (1024 ^ 2), NumDigitsAfterDecimal)) & " Mo"
        Case Is >= 1
            sValue = CStr(Round(dw / 1024, NumDigitsAfterDecimal)) & " Ko"
        Case Is = 0
            sValue = CStr(Round(dw)) & " octets"
    End Select
    Let StrFormatByteSize = sValue
End Function

signaler à un administrateur
Commentaire de Patrice99 le 19/02/2006 09:07:05

Ben voici ma fonction à moi alors :

Public Function sFormaterTailleOctets$(ByVal lTailleOctets&)

    ' Renvoyer une taille de fichier bien formatée dans une chaîne de caractère

    ' 1024 est la norme actuellement employée dans Windows,
    '  mais 1000 sera peut être un jour la norme
    Dim sAffichage$ = sFormaterNumerique(lTailleOctets) & " octets"
    Dim rNbKo! = CSng(Math.Round(lTailleOctets / 1024, 1))
    If rNbKo > 0 Then sAffichage &= " (" & sFormaterNumerique(rNbKo) & " Ko"
    Dim rNbMo! = CSng(Math.Round(lTailleOctets / (1024 * 1024), 1))
    If rNbMo > 0 Then sAffichage &= " = " & sFormaterNumerique(rNbMo) & " Mo"
    Dim rNbGo! = CSng(Math.Round(lTailleOctets / (1024 * 1024 * 1024), 1))
    If rNbGo > 0 Then sAffichage &= " = " & sFormaterNumerique(rNbGo) & " Go"
    If rNbKo > 0 Or rNbMo > 0 Or rNbGo > 0 Then sAffichage &= ")"
    sFormaterTailleOctets = sAffichage

End Function

signaler à un administrateur
Commentaire de Patrice99 le 19/02/2006 09:08:32

et la fonction qui va avec :

Public Function sFormaterNumerique$(ByVal rVal!)

    ' Formater un numérique avec une précision d'une décimale

    ' Le format numérique standard est correct (séparation des milliers et plus),
    '  il suffit juste d'enlever la décimale inutile si 0

    Dim nfi As Globalization.NumberFormatInfo = _
        New Globalization.NumberFormatInfo
    ' Définition des spérateurs numériques
    nfi.NumberGroupSeparator = " "   ' Séparateur des milliers, millions...
    nfi.NumberDecimalSeparator = "." ' Séparateur décimal
    ' 3 groupes pour milliard, million et millier
    ' (on pourrait en ajouter un 4ème pour les To : 1000 Go)
    nfi.NumberGroupSizes = New Integer() {3, 3, 3}
    nfi.NumberDecimalDigits = 1 ' 1 décimale de précision
    sFormaterNumerique = rVal.ToString("n", nfi) ' n : numérique général
    ' Enlever la décimale si 0
    sFormaterNumerique = sFormaterNumerique.Replace(".0", "")

End Function

signaler à un administrateur
Commentaire de BZY1 le 19/02/2006 14:04:29

Dans le meme genre tu as GetFileSize (va voir sur allapi.net si tu connais pas, il y a un bon exemple) a+

signaler à un administrateur
Commentaire de MasterHack le 19/02/2006 15:06:10

Salut;
GetFileSize dans le cas d'un fichier local, sinon la fonction sujet peut etre utiliser dans des cas tels le telechargement de fichiers distants.
Merci pour vos codes, c'est tres instructif.

signaler à un administrateur
Commentaire de MadM@tt le 20/02/2006 01:34:20

Salut, c'est cool ce code je connaissais pas cette api.
Je voulais savoir, 1024 ça a été décidé arbitrairement par windows ??

signaler à un administrateur
Commentaire de Maksime le 20/02/2006 11:56:53

--> MadM@tt : c'est lié au fait que tout est en binaire en informatique. Tout est là
http://fr.wikipedia.org/wiki/Octet

signaler à un administrateur
Commentaire de MadM@tt le 20/02/2006 12:56:27

Maksime > Oui désolé j'ai pas été clair, je sais que c'est 2^10, ce que je voulais savoir c'est pourquoi après tout, ça aurait pu marcher avec 2^7 ou autre, ou meme 436, mais je voulais savoir si c'était windows qui avait décidé ça ?
Ps : le lien que tu m'a passé n'a pas l'air de marcher

signaler à un administrateur
Commentaire de ScSami le 20/02/2006 14:51:26

Windows est un OS et a ce titre il ne décide rien! Mais si ta question est de savoir si Crosoft est pour quelque chose dans le fait qu'on passe des unités à leurs kilos puis leur méga ... je dirais non, évidemment!!! Tu sais, en base dix aussi on peut parler en Kilos ... D'ailleurs, certains commerçants parlent en KE (KiloEuros... anciennement KF). La particularité du 024 est juste du au binaire. Je sais pas ce que ça donnerait en trinaire mais ce ne serait pas non plus "juste" (000) !

signaler à un administrateur
Commentaire de MadM@tt le 20/02/2006 17:20:34

lol non c'est toujours pas ce que je voulais dire ^^ tant pis lol

signaler à un administrateur
Commentaire de FAS le 24/02/2006 01:26:55

MadM@tt >> C'est 1024, parce que ça s'approche du 1000 du système de notation scientifique standard : théoriquement, on devrait pas dire un kilo-octet pour 1024 octet mais un "kibi-octet". Un kilo-octet valant 1000 octets. Dans la pratique, à part pour les fabricants de disque dur qui peuvent comme ça indiquer des valeurs qui semblent supérieures à ce qu'elles sont en vrai, personne n'utilise la notation "kibi", et tout le monde dit "kilo" pour 1024, même si c'est un peu différent.

Mais tout cela était bien expliqué dans la page donnée par Maksime.

signaler à un administrateur
Commentaire de thel0rd le 06/04/2006 15:22:39

cool je connaissais pas du tout cette API, thx j'en ai besoin en plus. merci encore a toi

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Conversion d'un octet hexadécimal en type long [ par Cyrille.fouchet ] Je voudrais savoir comment convertir un octect ayant une valeur hexadécimal en un type long.Merci d'avancecyrille Fouchet Conversion String en Byte[] [ par syndrael ] Bonjour,J'essaie de créer un TcpListener à partir de mon adresse IP ki est .. une String. Et donc j'aimerai convertir cette string en tableau de Byte. conversion string en byte [ par lapolo13 ] Est ce que qqun peut me dire pourquoi ce code ne marche pas : Dim prompt As String Dim promptByte As Byte prompt = "coucou" promptByte Conversion de type [ par bilat0 ] Bonsoir, je cherche la mani&#232;re la plus simple et la plus rapide pour passer d'un type "Byte" &#224; un type "Double"Pourquoi ? parceque j'utilise Conversion String a Byte [ par shadow1779 ] Bonjour, j'essaye de faire un petit programme utilisant les sockets, pour l'envoi je fais ceci afin de convertir un string en byte... mais comment con ???? conversion d'un string vers Byte, Integer ou short [ par JeremyNeReculeraPas ] Salut salut à  tous!!!J'ai un pti problème que je n'arrive pas à résoudre et qui me rapel bien que je ne suis qu'un débutant...lolJ'essaye de faire un conversion string to byte [ par Flewms ] Bonjour à tous, je doit convertir la valeur d'une lettre en octet, pour cela j'ai créer un tableau de 33 octets et je met par exemple dans une as byte et integer a la fois [ par marty14 ] Bonjour,est il possible de declarer en BYTE et en INTEGER en meme temps ?Dim bufferin(0 To BufferInSize) As Byte conversion decimal -> hexadecimal [ par calimeria ] bonjour à tousvoilà j'ai lu plein de choses sur cette conversionnotamment que la fonction Hex() permettait de le faireseulement avec vb6 quand je fais VB6 conversion iso-8859-1 [ par globule ] Bonjour,J'essaye d'afficher un texte encodé en iso-8859-1 dans une textbox. Malheureusement les accents sont remplacés par des caractères spéciaux. J'


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 1,295 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.