Convertir un Long en String

HollowSpecter128 Messages postés 22 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 11 février 2006 - 26 sept. 2004 à 20:26
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 - 26 sept. 2004 à 22:53
Bonsoir à tous,

J'ai un petit problème.
Je dois convertir un Long en String pour des besoins de stockage de données.

Exemple :
le nombre 1830381757 donne 6D1968BD en hexadécimal
&H6D = 109
&H19 = 25
&H68 = 104
&HBD = 189

Il faut donc que je trouve, à partir du nombre de départ (celui en décimal) et par le calcul, les nombres en gras.
Je savais comment le faire avec des xor et des divisions, mais j'ai oublié.
Merci d'avance.

21 réponses

cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
26 sept. 2004 à 20:29
Salut, créer une variable String

regarde :
dim toto as string
dim mydata as long
mydata=1830381757
toto=mydata


Et le tour est jouer, j'ai tester et ça marche super

Chris...
Firstruner
0
HollowSpecter128 Messages postés 22 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 11 février 2006
26 sept. 2004 à 20:49
Encore toi lol
Lis mon post en entier et c'est drôlement plus complexe.
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
26 sept. 2004 à 21:09
!heu bhà vi tjs moi, mais pas pour longtemp y'a un film sur TF1 et Urgence sur FR2.

je dois dire que ta question est assez tordu, lol.

je n'en ai aucune idée, mais j'ai hâte de votre la solution

Chris...
Firstruner
0
cs_Pingouin Messages postés 262 Date d'inscription lundi 26 août 2002 Statut Membre Dernière intervention 24 août 2005
26 sept. 2004 à 21:22
Bon alors une solution avec du bricolage :
Tu decoupes la chaine initale en morceaux de deux caracteres puis tu convertis en decimal avec cdec(" ")
Un truc du genre (a tester je le fais en live) :

schaine = Hex("1830381757") ' renvoie 6D1968BD
Dim sNombreEnGras (1 to int(tlen (schaine)/2))

for nboucle 1 to len(schaine) step 2
sBuffer = mid$(schaine,nboucle,2)
sNombreEnGras(nboucle) = Cdec(sBuffer)
next nboucle

Enfin un truc dans ce gout la koi.

Mais ca reste du bricolage si kkun a mieux j'aimerais savoir ne serait ce que par curiosité.

PS:yaura sns doute une erreur a la fin de la boucle mais je peux pas tester dsl.

The Pingouin 8-)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Pof Messages postés 78 Date d'inscription lundi 11 février 2002 Statut Membre Dernière intervention 7 février 2006 1
26 sept. 2004 à 21:28
Function toString(nombre As Long) As String
Dim sHex As String
Dim i As Integer
Dim itemp As Integer
sHex = Right("00000000" & Hex(nombre), 8)
Debug.Print sHex
toString = ""
For i = 0 To 3
toString = toString + Chr(Val("&H" & Mid(sHex, 2 * i + 1, 2)))
Next i
End Function
' :)
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
26 sept. 2004 à 21:28
Pingouin,

J'ai tester ça mais le script diffère un peu de ton original. PB : Type incompatible sur CDEC :

schaine = Hex("1830381757") ' renvoie 6D1968BD
ReDim sNombreEnGras(1 To Int(Len(schaine) / 2))

For nboucle = 1 To Len(schaine)
    sBuffer = Mid$(schaine, nboucle, 2)
    sNombreEnGras(nboucle) = CDec(sBuffer)
Next nboucle


Chris...
Firstruner
0
cs_Pof Messages postés 78 Date d'inscription lundi 11 février 2002 Statut Membre Dernière intervention 7 février 2006 1
26 sept. 2004 à 21:29
(tu peux enlever le debug.print c'était pour que je verifie)
0
cs_Pof Messages postés 78 Date d'inscription lundi 11 février 2002 Statut Membre Dernière intervention 7 février 2006 1
26 sept. 2004 à 21:31
(et le itemp aussi :s bon je le refais)

Function toString(nombre As Long) As String
Dim sHex As String
Dim i As Integer
sHex = Right("00000000" & Hex(nombre), 8)
toString = ""
For i = 0 To 3
toString = toString + Chr(Val("&H" & Mid(sHex, 2 * i + 1, 2)))
Next i
End Function
' :)
0
cs_Pof Messages postés 78 Date d'inscription lundi 11 février 2002 Statut Membre Dernière intervention 7 février 2006 1
26 sept. 2004 à 21:37
ou sinon, bcp plus chouette (je viens d'y penser)

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)

Function toString2(nombre As Long) As String
Dim sTemp As String
CopyMemory sTemp, nombre, Len(nombre)
toString2 = sTemp
End Function
0
cs_Pingouin Messages postés 262 Date d'inscription lundi 26 août 2002 Statut Membre Dernière intervention 24 août 2005
26 sept. 2004 à 21:42
Ca ca marche et ca te mets tous les nombres que tu veux (ceux en gras) dans un tableau :

Dim sChaine As String
Dim nLongueur As Integer
Dim sNombreEnGras() As String
Dim nBoucle As Integer
Dim sBuffer As String

sChaine = Hex("1830381757") ' renvoie 6D1968BD
nLongueur = Int(Len(sChaine) / 2) + 1
ReDim sNombreEnGras(1 To nLongueur)

For nBoucle = 1 To Len(sChaine) Step 2
sBuffer = Mid$(sChaine, nBoucle, 2)
sNombreEnGras(Int(nBoucle / 2) + 1) = CDec("&h" & sBuffer)
Next nBoucle

The Pingouin 8-)
0
HollowSpecter128 Messages postés 22 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 11 février 2006
26 sept. 2004 à 21:57
j'aime pas trop le bricolage.
par contre, le copymemory, j'aurais dû y penser
il me faudrait la méthode avec les xor et les divisions
0
cs_Pingouin Messages postés 262 Date d'inscription lundi 26 août 2002 Statut Membre Dernière intervention 24 août 2005
26 sept. 2004 à 22:05
Bon ben je remballe ma caisse a outils pleine de camboui alors lol. Nan mas c vrai le CopyMemory c plus joli. Pour ce qui est des xor et des divisions la je suis dépassé

The Pingouin 8-)
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
26 sept. 2004 à 22:10
Function toString(nombre As Long) As String
    Dim tmp As Long
    
    toString = vbNullString
    
    While nombre > 0
      tmp = nombre And 255
      nombre = nombre \ 256
' 1) en numérique
      toString = tmp & " " & toString
' 2) en caractères
'     toString = Chr$(tmp) & " " & toString
' 3) en Hexa
'     toString = Hex$(tmp) & " " & toString
      Wend
    
End Function
0
cs_Pof Messages postés 78 Date d'inscription lundi 11 février 2002 Statut Membre Dernière intervention 7 février 2006 1
26 sept. 2004 à 22:19
ah ouais tiens, c'est une chouette méthode ça ^^, et donc le And agit comme le Mod ? ça sert à quoi d'avoir deux opérateurs qui font la meme chose ? (si qqn a une réponse ca m'intéresse :p)
et donc le \ c'est la division entière je suppose :) bien bien
0
HollowSpecter128 Messages postés 22 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 11 février 2006
26 sept. 2004 à 22:22
Bravo gobillot c'est exactement ce que je cherchais
Pingouin > faut pas se vexer y en a plein qui n'arriverai même pas à faire ce que t'as fait lol
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
26 sept. 2004 à 22:24
de rien

le Mod 255 ferait exactement la même chose.
mais les fonctions logiques sont plus rapides
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
26 sept. 2004 à 22:24
ça sert à quoi ce truc ? parce que j'arrive pas à piger dans quel app mettre un truc pareil.

Chris...
Firstruner
0
HollowSpecter128 Messages postés 22 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 11 février 2006
26 sept. 2004 à 22:38
pour cboulas > pour stocker le nombre 1830381757 par exemple dans un fichier, tu fais comment? quand tu sais qu'il faudra que t'en stocke 30000 des chiffres pareils et qu'il faudra que tu les transfer par l'internet sur un serveur.
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
26 sept. 2004 à 22:40
C pas faisable dans un fichier text ?

Chris...
Firstruner
0
HollowSpecter128 Messages postés 22 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 11 février 2006
26 sept. 2004 à 22:51
si mais quand t'en a 30000 minimum et 80000 max, vaut mieux économiser la taille au max, d'où cette solution
au fait remerci pour le selfdestruct ;)
0
Rejoignez-nous