Преобразование массива int в массив char и обратно через memcpy в c ++ - PullRequest
3 голосов
/ 09 декабря 2011

Я хочу преобразовать массив int в массив char и затем снова, для целей сериализации.Он не должен работать кроссплатформенно.

Я придумал

  //sample int array 
  int arr[] = {1,2,3,4,100};
  char char_arr[sizeof(arr)];
  //int arr to char arr
  memcpy(char_arr, arr, sizeof(arr));

  int newarr[sizeof(char_arr)/sizeof(int)];
  //char arr back to int arr
  memcpy(newarr, char_arr, sizeof(char_arr)/sizeof(int));

Это, похоже, не работает (newarr содержит значения, отличные от arr).Есть предложения?

Ответы [ 2 ]

6 голосов
/ 09 декабря 2011

Третий аргумент memcpy - это количество байтов *, а не количество элементов.Таким образом, ваш второй memcpy звонок неправильный.


* Число char с, технически.
0 голосов
/ 09 декабря 2011

memcpy копирует байты памяти, а не элементы массива и, следовательно, не выполняет преобразование элементов массива. Если вы хотите преобразовать массив символов в массив целых чисел, вы можете попробовать std :: copy, который копирует контейнеры элемент за элементом.

int newarr[sizeof(char_arr)/sizeof(char_arr[0])]; 
std::copy(&char_arr[0], &char_arr[sizeof char_arr/sizeof char_arr[0]], newarr);
...