Oppure

Loading
29/06 23:03
dylan666
Ciao a tutti, sto provando a riconvertire del codice C# in VB.NET, che mi è un po' più familiare.
Sono arrivato a questa parte che non capisco

const int BUFSIZE = 4 * 1024;
byte [] buffer = new byte[BUFSIZE];
string pqueue = "test";
int pos = 0;
buffer[pos++] = 2;
for (int i = 0; i < pqueue.Length; i++)
{
    buffer[pos++] = (byte)pqueue[i];
}
buffer[pos++] = (byte) '\n';


In particolare non mi è chiaro cosa fa "buffer[pos++] = 2".
Sbaglio o il suo risultato è identico a scrivere "buffer[pos] = 2" ?
Il primo incremento è quindi "finto"?

Con dei convertitori online mi è uscito questo ma mi è ancora meno chiaro:

    Const BUFSIZE As Integer = 4 * 1024
    Dim buffer As Byte() = New Byte(BUFSIZE) 
    Dim pqueue As String = "test"
    Dim pos As Integer = 0
    buffer(Math.Min(System.Threading.Interlocked.Increment(pos), pos - 1)) = 2

    For i As Integer = 0 To pqueue.Length - 1
        buffer(Math.Min(System.Threading.Interlocked.Increment(pos), pos - 1)) = CByte(pqueue(i))
    Next

    buffer(Math.Min(System.Threading.Interlocked.Increment(pos), pos - 1)) = CByte(vbLf)
 


Mi aiutate a capirci qualcosa?:-|
Ultima modifica effettuata da dylan666 29/06 23:37
aaa
30/06 20:13
Carlo
pos++ significa: pos = pos + 1, che si può scrivere anche: pos += 1.
Mentre pos++ in C# si può mettere nell'indice, in Vb pos += 1 non si può mettere c'è bisogno di una riga in più.


Const BUFSIZE As Integer = 4 * 1024
Dim buffer(BUFSIZE - 1) As Byte
Dim pqueue As String = "test"
Dim pos As Integer = 0
buffer(pos) = 2
pos += 1
For i As Integer = 0 To pqueue.Length - 1
    buffer(pos) = Asc(pqueue.Chars(i))
    pos += 1
Next i
buffer(pos) = Asc(vbLf)
pos += 1 ' questa riga sarebbe inutile se il codice finisse qui, indispensabile se vuoi aggiungere altri codici ASCII nella posizione successiva a quella corrente ed usare pos come indice.


Se ti serve la spiegazione di cosa fa il codice riga per riga chiedi.



Ultima modifica effettuata da Carlo 08/07 12:21
in programmazione tutto è permesso
01/07 15:54
Carlo
Postato originariamente da dylan666:

In particolare non mi è chiaro cosa fa "buffer[pos++] = 2".
Sbaglio o il suo risultato è identico a scrivere "buffer[pos] = 2" ?
Il primo incremento è quindi "finto"?


In C/C++/C#/Java/JavaScript
pos++ significa: incrementa di 1 pos dopo aver eseguito l'istruzione
++pos significa: incrementa di 1 pos prima di aver eseguito l'istruzione

"buffer[pos++] = 2" è uguale a "buffer[pos] = 2" solo se non consideri che ad istruzione eseguita pos sarà incrementato di 1

Tradotto in codice:
buffer[pos++] = 2;

diventa:
buffer(pos) = 2
pos += 1

----------------------------
buffer[++pos] = 2;

diventa:
pos += 1
buffer(pos) = 2

La differenza non è da sottovalutare.
Ultima modifica effettuata da Carlo 01/07 16:08
in programmazione tutto è permesso