-2

あるメソッドから別のメソッドにunsignedchar配列を渡す必要があり、次のコードを使用してみました。

{
     unsigned char *lpBuffer = new unsigned char[182];
 ReceiveSystemState(lpBuffer);

}

BOOL ReceiveSystemState(unsigned char *lpBuffer)
  {
      unsigned char strRecvBuffer[182] = { 0 };
      //strRecvBuffer construction

      memcpy(lpBuffer, strRecvBuffer, sizeof(strRecvBuffer));

      return TRUE;
 }

これらの3つの方法(で使用ReceiveSystemState)はどちらも期待どおりに機能しませんでした。それらのそれぞれを使用した後、それがコピーされるのは最初の文字でstrRecvBufferあり、それ以上のものではありません。にはstrRecvBuffer要素ごとに空の文字がありますが、その文字列はハードウェアデバイスからのメッセージであり、そのメッセージはプロトコルを使用して分析されるため、そのまま必要です。ここで何が恋しいですか?初期化lpBufferが間違っていますか?

編集:私はmemcpy仕事をするために簡単な方法を使用しました。それでも同じ結果です。コピーされるのは、の最初の文字だけですstrRecvBuffer

EDIT2:作業コード:

{
     unsigned char *lpBuffer = new unsigned char[182];
     ReceiveSystemState(lpBuffer);
     for (int i = 0; i < 144; i++)
     {
         memcpy(&c_dateKG[i], lpBuffer + i * sizeof(unsigned char), sizeof(unsigned char) );
     }

}    
  BOOL ReceiveSystemState(unsigned char *lpBuffer)
  {
     unsigned char strRecvBuffer[182] = { 0 };
     //strRecvBuffer construction

     memcpy(lpBuffer, strRecvBuffer, sizeof(strRecvBuffer));

     return TRUE;
  }
4

1 に答える 1

7

あなたのコードは絶対にゴミです。いくつかのメモ:

使用sizeof:

sizeof(static_massive_name);または_count_of_arr_elements * sizeof(arr_type);

例えば:

unsigned char src[255];    
unsigned char dst[255];

// fill src with random data
for (int i = 0; i < 255; ++i) {
    src[i] = static_cast<unsigned char> (rand() % 255);
}

memcpy(dst, src, sizeof(dst));


// now dst will have copied values from src (random numbers)

更新

テスト用の完全なソース コード:

#include <iostream>
#include <string.h>
#include <time.h>
#include <stdlib.h>

using namespace std;

void print(unsigned char* arr, size_t size) {
    for (size_t i = 0; i < size; ++i) { 
        // see type casting (to int)!!!
        cout << "arr[" << i << "] = " << (int)arr[i]<< endl;
    }
}

int main() {
    srand(time(0));

    // unsigned char type hold values from 0 to 255
    unsigned char src[15];
    unsigned char dst[15];

    for (int i = 0; i < 15; ++i) {
        src[i] = rand() % 255;
    }

    memcpy(dst, src, sizeof(dst));

    print(src, 15);
    print(dst, 15);

    return 0;
}

結果:

arr[0] = 34
arr[1] = 80
arr[2] = 183
arr[3] = 112
arr[4] = 18
arr[5] = 120
arr[6] = 183
arr[7] = 0
arr[8] = 0
arr[9] = 0
arr[10] = 0
arr[11] = 57
arr[12] = 137
arr[13] = 4
arr[14] = 8
arr[0] = 34
arr[1] = 80
arr[2] = 183
arr[3] = 112
arr[4] = 18
arr[5] = 120
arr[6] = 183
arr[7] = 0
arr[8] = 0
arr[9] = 0
arr[10] = 0
arr[11] = 57
arr[12] = 137
arr[13] = 4
arr[14] = 8
于 2012-10-05T07:52:06.827 に答える