массивы — c ++ unsigned char char copy

Мне нужно передать массив без знака из одного метода в другой, и я попытался использовать этот код:

{
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;
}

-2

Решение

Ваш код абсолютно фигня. Некоторые заметки:

Используйте 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(src, dst, sizeof(dst));// now dst will have copyed 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(src, dst, 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
6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]