none
Dúvida com conversão de código de C++ para C# RRS feed

  • Pergunta

  • Olá,

    Eu estou convertendo um código em C++ para C# e tive algumas dúvidas com a sintaxe C++.

    unsigned char* data = (unsigned char*)&fileBuffer[8];
    long pos = 8;
    while(pos + 32 < fileSize){
    data += 32;
    pos += 32;
    }

    Minha dúvida neste trecho é em relação ao "data += 32" sendo que em C# unsigned char* seria um byte[] como seria possível inserir dados no data sem ter que criar um novo bloco de memória a cada loop? Eu fiz isso mas além do código não funcionar corretamente ele ficou muito lento, demorava cerca de 3 minutos pra executar tal operação.

    E outra dúvida é em relação à isso:

    void WriteToMemory(Entry*& memory){
    		for(unsigned int i = 0; i < mCount; ++i){
    		memcpy_s(memory, sizeof(Entry), mEntries[i], sizeof(Entry));
    		++memory;
    	}
    }

    Esse ++memory está me matando também.. não faço ideia do que ele faz.
    Por favor me ajudem.
    Agradeço desde já!

    terça-feira, 15 de novembro de 2016 18:23

Respostas

  • Smo HKS,

    Faz um bom tempo que não trabalho com C++, mas se me lembro bem, o ponteiro data inicialmente é posicionado no endereço de memória referente ao 9º elemento do vetor fileBuffer, daí a cada vez que você soma 32 ao ponteiro data ele avançaria 32 posições de memória.

    Que tipo é este Entry?

    O que seu código precisa fazer? Pois em código gerenciado muito não é mantido justamente por não se trabalhar com endereços de memória diretamente.


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".


    terça-feira, 15 de novembro de 2016 18:34

Todas as Respostas

  • Smo HKS,

    Faz um bom tempo que não trabalho com C++, mas se me lembro bem, o ponteiro data inicialmente é posicionado no endereço de memória referente ao 9º elemento do vetor fileBuffer, daí a cada vez que você soma 32 ao ponteiro data ele avançaria 32 posições de memória.

    Que tipo é este Entry?

    O que seu código precisa fazer? Pois em código gerenciado muito não é mantido justamente por não se trabalhar com endereços de memória diretamente.


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".


    terça-feira, 15 de novembro de 2016 18:34
  • Bom dia,

    Devido a falta de interação do autor dessa pergunta,

    essa thread está sendo fechada. Caso o problema ainda

    esteja ocorrendo, favor abrir uma nova thread.

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 18 de novembro de 2016 11:26
    Moderador