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

Résolu
pookyblast - 13 sept. 2012 à 20:21
 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)??

7 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
14 sept. 2012 à 13:09
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
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
13 sept. 2012 à 23:42
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
13 sept. 2012 à 23:47
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
14 sept. 2012 à 12:01
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
0

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

Posez votre question
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
14 sept. 2012 à 19:14
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
0
Yeah! C'est ça. (Promis, demain, je commence à apprendre à lire en entier les messages..)
Merci !!!!
0
Rejoignez-nous