Integer to UInteger ?

Résolu
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 - 12 juin 2010 à 00:06
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 12 juin 2010 à 22:20
Bonjour,
Je suis en trein de travailler sur la lecture des données dans un fichier en mode binaire. Je dois lire une valeur de type UInteger.
Mais voila, j'utilise la méthode FileGet (qui marche ma fois fort bien) mais qui ne peut pas travailler avec les UInteger.

Mon idée étant de faire une fonction Integer_to_UInteger(Integer)Uniteger
A l'origine je voulais travailler avec CopyMemory mais d'un je n'arrive pas a m'en servir en VB.Net et deux d'après ce que j'ai vu sur internet, ce ne serrait pas conseillés.

Je tiens à préciser que le programme demande à être le plus rapide possible en temps d'éxécution !!!

par avance merci pour votre aide.

4 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
12 juin 2010 à 01:05
Bonjour,

Je vais tenter un code :
if MyInt>=0, un simple cast suffira
sinon :
MyUInt=cuint((MyInt AND Integer.MaxValue) or (clng(integer.MinValue) AND UInteger.MaxValue))

à tester.

On manipule les bits, la valeur Max est : &h7FFFFFFF
La valeur min est : &h80000000

donc en jouant avec, on parvient à faire la conversion.

ça fonctionne aussi avec les les masques, mais cette méthode fonctionne avec les types variés de numériques.

Mon site
3
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 3
12 juin 2010 à 01:03
En bidouillant j'ai trouvé ça :
'convertir Short en UShort :
Dim p_nb as UShort
Dim nb as Short = - &hFF
If (nb >= 0) Then            
     p_nb = nb        
Else            
     Dim Tmp(0 To 1) As Byte                
         Tmp(0) = nb And &HFF                
         Tmp(1) = (nb >> 8) And &HFF            
     p_nb = Tmp(0) + Tmp(1) * 2 ^ 8        
End If


si quelqu'un a mieux, je suis preneur ...
0
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 3
12 juin 2010 à 11:01
Bonjour et merci pour ta réponse NHenry
je te confirme qu'elle marche
pas forcement plus rapide que la méthode que j'indique elle a le mérite d'être plus propre à écrire et surtout elle peut être facilement modifiée pour travailler sur plusieurs types. Je l'ai adaptée pour pouvoir l'utiliser dans mon programme :
    Public Shared Function To_Unsigned(ByVal value As Short) As UShort
        If (value >= 0) Then
            Return value
        Else
            Return CUShort((value And Short.MaxValue) Or (CLng(Short.MinValue) And UShort.MaxValue))
        End If
    End Function
    Public Shared Function To_Unsigned(ByVal value As Integer) As UInteger
        If (value >= 0) Then
            Return value
        Else
            Return CUInt((value And Integer.MaxValue) Or (CLng(Integer.MinValue) And UInteger.MaxValue))
        End If
    End Function


Domage, j'aimais bien la solution du copyMemory ^_^. Ca doit être une déformation de mes longues années de VB6.

merci
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
12 juin 2010 à 22:20
Merci du retour :)

Mon site
0
Rejoignez-nous