[VB] Copier une partie d'un tableau de Byte en String [Résolu]

- - Dernière réponse :  pookyblast - 14 sept. 2012 à 20:02
Bonjour,
Lorsque je souhaite copier un tableau de Byte (tBytes) dans une variable de type String (sStr), j'utilise:
sStr = StrConv(tBytes, vbUnicode)

Mais comment faire pour ne copier qu'une partie du tableau dans ma chaine (par exemple à partir de l'indice 2)?
J'y arrive bien en faisant un CopyMemory (dans un tableau temporaire) puis le StrConv:
CopyMemory ByVal VarPtr(tBytesTmp(0)), ByVal VarPtr(tBytes(iIndex)), iLen)
sStr = StrConv(tBytesTmp, vbUnicode)
Mais il y a-t-il plus rapide (en faisant 'pointer' le StrConv directement au ième indice)??
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
209
3
Merci
toujours pas là ...
On continue à s'amuser seul ? D'accord ===>> avec MidB, alors :
toto = "1234567890"
   Dim titi() As Byte
   titi StrConv(toto, vbFromUnicode) '>> çà, c'est ton tableau d'octets de départ, donc
   ou_commencer = 2
   titi MidB(titi, ou_commencer) '>> nouveau tableau titi, commençant où on l'a voulu
   MsgBox StrConv(titi, vbUnicode) ' ===>> la preuve

Je trouve que VB6 est puissant, personnellement. Pas vous ?
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 136 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
209
0
Merci
Bonjour,
je ne comprends pas trop ton problème.
Chaque octet de ton tableau d'octets représente un caractère de la chaine sStr (complète)
Si tu veux n'extraire qu'à partir du deuxième octet du tableau d'octets, cela équivaut tout simplement à extraire Mid(sStr,2) de la chaîne complète sStr resultant de la concersion/vbUnicode de la totalité de ton tableau d'octets !
A moins que j'aie mal compris ce que tu veux !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
209
0
Merci
Pour que tu me comprennes mieux : exemple :

Private Sub Command1_Click()
toto = "voilà un texte que l'on va passer en tableau d'octets (pour en faire un en exemple)"
Dim titi() As Byte
'on fabrique ici un tableau d'octets (pour exemple). C'est là ce que toi, tu as au départ, non ?
titi = StrConv(toto, vbFromUnicode)
' on ne veut extraire une chaîne qu'à partir du 7ème octet du tableau d'octets ?
sstr = Mid(StrConv(titi, vbUnicode), 7)
MsgBox sstr
End Sub


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
209
0
Merci
Tiens ! Plus là ! et je m'ennuie ici ...

Bon. Je vais continuer pour m'amuser et espérer que d'autres se joignent à nous : ===>>
Nous allons aller vers un peu de rigolade et utiliser rightB (puisque tableau d'octets)
Exemple:

toto = "1234567890"
   Dim titi() As Byte
   titi StrConv(toto, vbFromUnicode) '>> çà, c'est ton tableau d'octets de départ, donc
   ou_commencer = 4
   titi = RightB(titi, UBound(titi) - ou_commencer + 2) '===>> tu l'as ici ton nouveau tableau d'octets 
   MsgBox StrConv(titi, vbUnicode) '==>> preuve



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
0
Merci
Merci ucfoutu pour ta(tes) réponse(s). Et désolé de ne pas répondre plus tôt: internet interdit au boulot...
Bon, tu as très bien compris mon problème et ce que je voulais obtenir comme résultat.
J'ai juste oublié de mentionner que je voulais faire ça... le plus rapidement possible.
Plus mon tableau va être grand, plus le StrConv (puis le Mid) vont prendre du temps CPU.
Dans le cas où mon tableau fait 1 000 000 octet (voire plus), je trouve "dommage" d'avoir à TOUT convertir puis faire un Mid ou Right pour ne récupérer que les 2 derniers octets par ex... D'où mon idée de faire 'pointer' le StrConv sur l'avant dernier octet.
Commenter la réponse de pookyblast
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
209
0
Merci
Re-regarde mes deux derniers codes.
Ils ne reconvertissent pas la totalité.
Attarde-toi au dernier.

Je ne connais personnellement rien de plus rapide.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
0
Merci
Yeah! C'est ça. (Promis, demain, je commence à apprendre à lire en entier les messages..)
Merci !!!!
Commenter la réponse de pookyblast