vbstreets conferințe - Vezi subiect - tipul de date string

Cred că pot ghici în cazul în care acesta este ridicat.
Mai precis, în cazul în care a luat cel de la care a luat-o.

Dacă faceți acest lucru:
Cod: Selectați toate Tip xx
un șir Ca
b Atâta timp
c Ca String * 10
d Atâta timp
e () Ca Byte
end Tip

Sub testul ()
s Dim ca STRING
x Dim As xx
Dim f Atâta timp
s = "abcdef" + ChrW (H6DE)

f = FreeFile
Deschideți "C: \ testfile" Pentru binare f
Pune #F. x
Închide f
end Sub

Apoi, vom obține un fișier rezultat destul de curios:
x.a va arata (hex): 00 61 62 07 63 64 65 66 3F
x.c - deci: 61 62 63 64 65 66 20 20 20 3F
Un x.e - așa: 00 0E 00 01 00 00 00 00 00 00 61 00 62 00 63 00 64 00 65 00 66 00 06 DE

Ie x.a înregistrate ca ansi, în timp ce în chiar la începutul adăugat lungime rândul doi octeți.
x.c - de asemenea, ca un ansi și lipsă o parte a liniei pentru a umple golurile.
Un x.e - ca o matrice de octeti (logice, în general) care constituie șirul prenex anumită dimensiune antet rovnenko 10 octeți.

Cu toate acestea, deoarece acest lucru este tot datorită faptului, ca un magazine vb siruri de caractere în memorie - mi pot imagina.

etichetă:
cli
eticheta JMP

Ei bine, atunci când salvați un fișier există unele nici seralizatsiya (rădăcini incidental merge în compatibilitatea inversă VB cu versiuni mai vechi, care a folosit ANSI-line), care, da, are puține în comun cu ierarhia în memorie.

-Ne separa fețele zâmbitoare de restul corpului lor, căpitane.
Așa e! Noi le decapita.

După ce sa transformat din nou o ureche surdă, a spus Hacker, am ceva prins pe creier.
Declarați două variabile de tipul String:

Cod: Selectați toate Dim strExemple_1 ca șir
Dim strExemple_2 Ca String * 10
Să presupunem că încărcăm în variabilele dintr-un fișier text txtExemple.txt. Dimensiunea de 20 kb.

Dimensiunea strExemple_1 este de 4 octeți și conține un pointer la o dimensiune BSTR-line 4+ (20 * 1024 + 1) * 2 = 40 966 (bytes).
Dimensiunea strExemple_2 este de 4 octeți și conține un pointer la o dimensiune BSTR-line 4+ (10 + 1) * 2 = 26 (bytes)

Sper cu adevărat că prins în mod corespunzător și în ordinea corectă. Dacă nu, vă rugăm să corectați.

char * out = „| * 0> 78 - +<|"; size_t cc = char_traits:: lungime (out);
pentru (size_t i = 0; i((Out ?? (i ??) ?? '89)); ??> cout<

BV a scris (a): Ce este 4 în ultima expresie?


Lungimea șir, uituc noastre stocate înainte de începerea liniei.

BV a scris (a): și chiar mai mult, înmulțit cu doi


dimensiunea WCHAR - 2 octeți, deci este necesar.

-Ne separa fețele zâmbitoare de restul corpului lor, căpitane.
Așa e! Noi le decapita.

adăugat
În orice caz, voi explica: Am crezut 4 între paranteze. 4 Și acest lucru a fost deja al doilea după ce menționează dimensiunea prefix

char * out = „| * 0> 78 - +<|"; size_t cc = char_traits:: lungime (out);
pentru (size_t i = 0; i((Out ?? (i ??) ?? '89)); ??> cout<

Din cele de mai sus, am format următoarele:
Declarăm două UDT și variabilele lor în modulul.

Cod: Selectați toate opțiunile Explicit

Public Tip MyCustomType_01
varFixedString Ca String * 10
varString ca șir
end Tip

Public Tip MyCustomType_02
varString_01 ca șir
varString_02 ca șir
end Tip

MyCustomer_01 publice, ca MyCustomType_01
MyCustomer_02 publice, ca MyCustomType_02
Pentru a scrie codul pentru buton:
Cod: Selectați toate Private Sub Command1_Click ()
Debug.Print „dimensiunea MyCustomer_01 în octeți“ vbTab LenB (MyCustomer_01)
Debug.Print „dimensiunea MyCustomer_02 în octeți“ vbTab LenB (MyCustomer_02)
end Sub
Și obținem:

Imediat a scris (a): dimensiunea MyCustomer_01 în octeți: 24
dimensiunea MyCustomer_02 în octeți: 8


Prin urmare, dimensiunea câmpului MyCustomer_01 include marimea MyCustomer_01.varFixedString 10 * 2 = 20 (bytes) și mărimea cursorului pe câmpul MyCustomer_01.varString BSTR -Row de 4 octeți, pentru un total de 24 octeți.
Prin urmare dimensiunea MyCustomer_02 este suma câmpurilor pointeri sale: 8 octeți.

Nu chiar.
În primul rând, a scăpa de ultima fraza „este in memoria.“

În al doilea rând, a anunțat ca șir de * N nu ia bytes 2L, dar binele nu este de ajuns: oricare fel nu obrazalsya la fiksed-string variabilă sau un câmp fiksed-string, acesta nu va apărea niciodată înainte în formă de adevăr. Se va crea întotdeauna de obicei BSTR-copie.

-Ne separa fețele zâmbitoare de restul corpului lor, căpitane.
Așa e! Noi le decapita.

Oh, oh!
N-am lăsat un sentiment puternic care să se ocupe de tipuri de VB, este necesar să se uite în salbaticia COM și OLE de automatizare, și, probabil, mai profunde.
Un hacker nu se va cere să citiți pe acest subiect?

șiruri fixe, cum ar fi VB, AFAIK, nu COM.

-Ne separa fețele zâmbitoare de restul corpului lor, căpitane.
Așa e! Noi le decapita.