-2

私が正しくない場合は、次のコードを使用してバイト配列を C# のメモリ位置にコピーします。

byte[] byteName = Encoding.ASCII.GetBytes("Hello There");

int positionMemory = getPosition();

Marshal.Copy(byteName, 0, new IntPtr(positionMemory), byteName.length);

ネイティブ C++ でこれを達成するにはどうすればよいですか?

4

2 に答える 2

6

ポインターと memcpy を使用します。

void * memcpy ( void * destination, const void * source, size_t num );

長さ n の配列 A を配列 B にコピーするとします。

memcpy (B, A, n * sizeof(char));

これは C++ よりも C に近く、文字列クラスには使用できるコピー機能があります。

  size_t length;
  char buffer[20];
  string str ("Test string...");
  length=str.copy(buffer,6,5);
  buffer[length]='\0';

完全なコードを含むより具体的なサンプルを次に示します。

#include <stdio.h>
#include <string>
#include <string.h>
#include <iostream>

using namespace std;
int main()
{

    string s("Hello World");
    char buffer [255];
    void * p = buffer; // Or void * p = getPosition()
    memcpy(p,s.c_str(),s.length()+1);
    cout << s << endl;
    cout << buffer << endl;
    return 0;
}

詳細が必要な場合はお知らせください

于 2012-05-15T23:20:49.807 に答える
1

memcpy()、、、およびはすべてmemmove()、のネイティブな同等物として使用できます。位置の処理に関しては、すべての .NET コードは整数をポインターにキャストするように実行されます。これは C++ でも実行できます。あなたが示した.NETコードは、次のものと同等です。CopyMemory()MoveMemory()Marshal.Copy()

std::string byteName = "Hello There"; 
int positionMemory = getPosition(); 
memcpy(reinterpret_cast<void*>(positionMemory), byteName.c_str(), byteName.length()); 
于 2012-05-16T01:46:56.040 に答える