C sharp - Problema con el uso de fixed

 
Vista:
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en C sharp (en relación al último mes)
Gráfica de C sharp

Problema con el uso de fixed

Publicado por aguml (9 intervenciones) el 29/12/2017 21:48:45
Todos los errores son por el uso de fixed que no se bien lo que hace y la explicacion que veo no me entero de mucho. Estos son los errores:
1
2
3
4
5
6
7
8
9
10
11
12
Error        1        No se puede declarar una variable local denominada 'ptr' en este ámbito, porque daría un significado diferente a 'ptr', que ya se utiliza en un ámbito 'secundario' con otra denotación        C:\Documents and Settings\BlueDeep\Mis documentos\Visual Studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs        225
Error        2        No se puede declarar una variable local denominada 'ptr2' en este ámbito, porque daría un significado diferente a 'ptr2', que ya se utiliza en un ámbito 'secundario' con otra denotación        C:\Documents and Settings\BlueDeep\Mis documentos\Visual Studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs        227
Error        3        No se puede declarar una variable local denominada 'ptr' en este ámbito, porque daría un significado diferente a 'ptr', que ya se utiliza en un ámbito 'primario o actual' con otra denotación        C:\Documents and Settings\BlueDeep\Mis documentos\Visual Studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs        245
Error        4        No se puede declarar una variable local denominada 'ptr2' en este ámbito, porque daría un significado diferente a 'ptr2', que ya se utiliza en un ámbito 'primario o actual' con otra denotación        C:\Documents and Settings\BlueDeep\Mis documentos\Visual Studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs        247
Error        5        No se puede utilizar la instrucción fixed para adquirir la dirección de una expresión de tipo fixed        C:\Documents and Settings\BlueDeep\Mis documentos\Visual Studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs        266
Error        6        No se puede declarar una variable local denominada 'ptr2' en este ámbito, porque daría un significado diferente a 'ptr2', que ya se utiliza en un ámbito 'secundario' con otra denotación        C:\Documents and Settings\BlueDeep\Mis documentos\Visual Studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs        283
Error        7        No se puede declarar una variable local denominada 'ptr' en este ámbito, porque daría un significado diferente a 'ptr', que ya se utiliza en un ámbito 'secundario' con otra denotación        C:\Documents and Settings\BlueDeep\Mis documentos\Visual Studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs        285
Error        8        No se puede declarar una variable local denominada 'ptr' en este ámbito, porque daría un significado diferente a 'ptr', que ya se utiliza en un ámbito 'primario o actual' con otra denotación        C:\Documents and Settings\BlueDeep\Mis documentos\Visual Studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs        303
Error        9        No se puede utilizar la instrucción fixed para adquirir la dirección de una expresión de tipo fixed        C:\Documents and Settings\BlueDeep\Mis documentos\Visual Studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs        303
Error        10        No se puede declarar una variable local denominada 'ptr2' en este ámbito, porque daría un significado diferente a 'ptr2', que ya se utiliza en un ámbito 'primario o actual' con otra denotación        C:\Documents and Settings\BlueDeep\Mis documentos\Visual Studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs        305
Error        11        No se puede utilizar la instrucción fixed para adquirir la dirección de una expresión de tipo fixed        C:\Documents and Settings\BlueDeep\Mis documentos\Visual Studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs        305
Error        12        Se esperaba un identificador        C:\Documents and Settings\BlueDeep\Mis documentos\Visual Studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs      93
y aqui el codigo como lo tengo ahora mismo: https://pastebin.com/EM1AknZe
Os estaria muy agradecido si me pudierais echar un cable con esto.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Wilfredo Patricio Castillo
Val: 707
Oro
Ha mantenido su posición en C sharp (en relación al último mes)
Gráfica de C sharp

Problema con el uso de fixed

Publicado por Wilfredo Patricio Castillo (416 intervenciones) el 30/12/2017 22:46:07
Pero si no sabes lo que hace, porqué estás usando algo que no sabes que hace?.

Además que el error es bien claro. Estás usando el mismo nombre de variable en ámbitos diferentes, así que no podemos adivinar que es lo que pretendes, si al menos nos explicaras que es lo que pretendes hacer te podríamos ayudar mejor.

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en C sharp (en relación al último mes)
Gráfica de C sharp

Problema con el uso de fixed

Publicado por aguml (9 intervenciones) el 31/12/2017 02:15:29
Lo que quiero es asignar a un puntero byte un array byte. Algo así:
byte[] array tiene en su interior lo obtenido al leer un archivo y Supongamos que es {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x20, 0x21, 0x22, 0x23}.
1
2
3
4
5
byte* ptr = &array[3]; //asigno la dirección al puntero 
int* ptr2 = (int*)ptr; //asigno la dirección del puntero de tipo byte al puntero de tipo int
int valor = *ptr2; //obtengo un valor int del buffer que sería 0x13141516
ptr2++; //me coloco en la dirección del siguiente entero del buffer
int valor2 = *ptr2; //valor2 valdría 0x17181920

Lo que pretendo está claro, leo un archivo binario en un buffer byte y quiero leerlo como valores int. Yo siempre he usado C++ y en ese lenguaje no hay tantos problemas para hacer cast entre tipos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en C sharp (en relación al último mes)
Gráfica de C sharp

Problema con el uso de fixed

Publicado por aguml (9 intervenciones) el 31/12/2017 10:18:30
¿Esto sería correcto?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public unsafe byte[] DecryptAll(byte[] eData)
{
    byte[] array = new byte[(int)eData.Length];
    ‎int* ptrInt1;
    ‎int* ptrInt2;
    ‎if (eData != null && (int)eData.Length !=0)
{
        ‎fixed (byte* ptrByte1 = &eData[0])
{
            ‎ptrInt1=(int*)ptrByte1;
        }
    }
    ‎else
{
        ‎fixed (byte* ptrByte1 = (byte[]) null)
{
            ptrInt1=(int*)null;
        }
    }
    ‎byte[] array2;
 
    ‎if ((array2 = array) != null &&(int)array2.Length != 0)
{
        ‎fixed (byte* ptrByte2 = &array2[0])
{
            ptrInt2=(int*)ptrByte2;
        }
    ‎}
    ‎else
    ‎{
        ‎fixed (byte* ptrByte2 = (byte[])null)
        ‎{
            ptrInt2=(int*)null;
        }
    }
    ‎for (int i = 0; i < (int)eData.Length >> 3;i += 1)
    {
        int num1 = ReverseDWORD(*ptrInt1);
        ptrInt1++;
        ‎int num2 = ReverseDWORD(*ptrInt1);
        ptrInt1++;
        ‎this.Desencriptar(ref num1, ref num2);
        num1 = (*ptrInt2 = ReverseDWORD(num1));
        ptrInt2++;
        num2 = (*ptrInt2 = ReverseDWORD(num2));
        ‎ptrInt2++;
    }
    return array;
}
La idea es ir cogiendo del array eData 2 enteros y encriptarlos, voy incrementando los punteros para ir accediendo al siguiente lugar de la memoria donde estará el siguiente entero.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar