Integer to UInteger ? [Résolu]

Flocreate 307 Messages postés lundi 17 juillet 2006Date d'inscription 27 mai 2012 Dernière intervention - 12 juin 2010 à 00:06 - Dernière réponse : NHenry 14280 Messages postés vendredi 14 mars 2003Date d'inscription 22 octobre 2018 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
NHenry 14280 Messages postés vendredi 14 mars 2003Date d'inscription 22 octobre 2018 Dernière intervention - 12 juin 2010 à 01:05
3
Merci
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

Merci NHenry 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de NHenry
Flocreate 307 Messages postés lundi 17 juillet 2006Date d'inscription 27 mai 2012 Dernière intervention - 12 juin 2010 à 01:03
0
Merci
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 ...
Commenter la réponse de Flocreate
Flocreate 307 Messages postés lundi 17 juillet 2006Date d'inscription 27 mai 2012 Dernière intervention - 12 juin 2010 à 11:01
0
Merci
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
Commenter la réponse de Flocreate
NHenry 14280 Messages postés vendredi 14 mars 2003Date d'inscription 22 octobre 2018 Dernière intervention - 12 juin 2010 à 22:20
0
Merci
Merci du retour :)

Mon site
Commenter la réponse de NHenry

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.