Poids caractère

Résolu
Vedlen Messages postés 360 Date d'inscription mardi 14 octobre 2003 Statut Membre Dernière intervention 7 septembre 2009 - 4 sept. 2006 à 16:31
Vedlen Messages postés 360 Date d'inscription mardi 14 octobre 2003 Statut Membre Dernière intervention 7 septembre 2009 - 4 sept. 2006 à 17:04
Bonjour,
Voici ma question : par quelle fonction est-il possible de retourner le poids en octet d'une chaîne de caractère ?

En fait c'est pour pouvoir contrôler le poids d'une chaîne avant de l'envoyer par winsock.

Merci

7 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
4 sept. 2006 à 16:33
Ben en fait tu prend la seconde syllabe de ton pseudo

longueur = Len(TaChaine)

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
4 sept. 2006 à 16:42
Oui 1 caractère = 1 octet pour le type string en VB6

Sinon tu utilise LenB pour connaitre le nombre d'octets en mémoire. Mais personnelement je n'ai jamais eu à l'utiliser.

[javascript:alink_4.Click() Long] contenant le nombre de caractères
d'une chaîne ou le nombre d'octets requis pour stocker une
<object id="alink_5" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"></object>[javascript:alink_5.Click() variable].

Syntaxe

Len( string | varname)

La syntaxe de la fonction Len comprend les éléments suivants :

Élément, Description, ----
string, Toute
<object id ="alink_6" type= "application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"></object>[javascript:alink_10.Click() arguments] doit être indiqué. Avec des
données de
<object id="alink_11" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"></object>[javascript:alink_11.Click() type défini par l'utilisateur], la
fonction Len renvoie la taille que la données occuperait si elle était
enregistrée dans un fichier.

Note   Utilisez la fonction LenB pour
traiter sous forme d'octets les données d'une chaîne, comme dans les langages à
jeux de caractères sous forme d'octets doubles (DBCS). Au lieu de renvoyer le
nombre de caractères d'une chaîne, la fonction LenBLenB renvoie la quantité de mémoire
requise, en tenant compte d'un éventuel remplissage entre les éléments. Pour
illustrer le code utilisant la fonction LenB, reportez-vous au second
exemple de la rubrique d'exemple.
renvoie le nombre
d'octets utilisés pour représenter cette chaîne. Avec des données de type défini
par l'utilisateur, la fonction

Note   La fonction Len peut ne pas être
capable de déterminer le nombre d'octets de mémoire requis si elle est utilisée
avec des chaînes de longueur variable contenues dans des
<object id ="alink_12" type= "application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"></object>[javascript:alink_12.Click() types de données] définis par
l'utilisateur

Len, fonction, exemple
Ce premier exemple utilise la fonction Len pour renvoyer le nombre de
caractères composant une chaîne ou le nombre d'octets nécessaires pour contenir
une variable. Le bloc Type...End Type définissant
CustomerRecord
doit être précédé du mot-clé Private s'il
apparaît dans un module de classe. Dans un module standard, une instruction
Type peut être de type Public.

Type CustomerRecord   ' Définit le type défini  par l'utilisateur.
   ID As Integer   ' Place cette définition dans un 
   Name As String * 10   ' module standard.
   Address As String * 30
End Type

Dim Customer As CustomerRecord   ' Déclare les variables.
Dim MyInt As Integer, MyCur As Currency
Dim MyString, MyLen
MyString  = "Bonjour le Monde"   ' Initialise la variable.
MyLen =   Len( MyInt)   ' Renvoie 2.
MyLen  = Len(Customer)   ' Renvoie 42.
MyLen =   Len( MyString)   ' Renvoie 16.
MyLen  = Len(MyCur)   ' Renvoie 8.


Ce second exemple utilise la fonction LenB et une fonction définie par
l'utilisateur (LenMbcs) pour renvoyer le nombre d'octets (caractères)
dans une chaîne, à condition qu'ANSI soit utilisé pour le codage de la
chaîne.

Function LenMbcs (ByVal str as String)
   LenMbcs =   LenB( StrConv(str, vbFromUnicode))
End Function

Dim MyString, MyLen
MyString  = "ABc"
' Où "A" and "B" sont DBCS et "c" est SBCS.
MyLen =  Len(MyString)
' Renvoie 3 - 3 caractères dans la chaîne.
MyLen =  LenB( MyString)
' Renvoie 6 - 6 octets utilisés pour Unicode.
MyLen  = LenMbcs(MyString)
' Renvoie 5 - 5 octets utilisés pour ANSI.


---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
3
Vedlen Messages postés 360 Date d'inscription mardi 14 octobre 2003 Statut Membre Dernière intervention 7 septembre 2009
4 sept. 2006 à 16:37
Tu es sûr que 1 caractère = 1 octet ?
0
Vedlen Messages postés 360 Date d'inscription mardi 14 octobre 2003 Statut Membre Dernière intervention 7 septembre 2009
4 sept. 2006 à 16:46
Une chose que je comprends pas alors :
il parait que les paquets de winsock sont limités à 8.192 octets.

Or lorsque je n'envoie que 5.000 caractères, la limite de paquet est dépassée et il me refait un Getdata......

D'où est-ce que ça vient alors ?
0

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

Posez votre question
Vedlen Messages postés 360 Date d'inscription mardi 14 octobre 2003 Statut Membre Dernière intervention 7 septembre 2009
4 sept. 2006 à 16:49
Petite remarque : les données transitées sont du binaire.
Mais normalement ça revient au même vu que ces données sont, au moment de l'envoie par winsock, dans une chaîne bridée par space() à 5000.
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
4 sept. 2006 à 16:59
A priori, d'après l'aide, GetData lit toutes les données disponibles dans la buffer au moment de l'appel, et pas forcement un paquet entier. De plus 8192 doit etre une taille maxi de paquet. Un paquet pouvant faire moins. Voire quelques octets seulement

Je ne sais pas trop comment est gerer le transfert avec le controle Winsock. Personellement les rares fois ou j'ai utiliser ce type de connection, je n'ai jamais obtenu de chaine de longueur fixe, tant en emission qu'en reception.

Par exemple, j'ai eu à envoyer 1 fois une trame de 128 octets cycliquement (en mode UDP certe), parfois elle partait en 2 morceaux, parfois en 3, parfois c'était 2 trames completes qui partaient ensembles.

Je pense que le mieux c'est que tu gere la reception qui peut ce faire en plusieurs morceaux en mémorisant le nombres d'octets déjà reçus .

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
Vedlen Messages postés 360 Date d'inscription mardi 14 octobre 2003 Statut Membre Dernière intervention 7 septembre 2009
4 sept. 2006 à 17:04
Bon je vais me débrouiller..

Merci pour ton aide casy :), ta première réponse répond tout de même à ma question ^^

++
0
Rejoignez-nous