Конвертировать упакованные данные в выровненные данные при копировании в C - PullRequest
0 голосов
/ 12 декабря 2018

Я хочу скопировать набор данных (каждая выборка по 3 байта) из упакованной памяти шириной 4 байта в память шириной 4 байта и выровненную по 4 байта.

Data samples: 0x345678, 0xDEFF12, 0x689ABC, 0xABCD24


Ex: Source (each 3 byte data is packed in the 4 byte  wide memory):
Add0 : 0x12345678
Add1 : 0X9ABCDEFF
Add2 : 0XABCD2468

Destination (4 bytes wide but each data is 4 byte aligned):

Add5: 0x345678
Add6: 0xDEFF12
Add7: 0x689ABC
Add8: 0xABCD24

Что такоелучший способ сделать это через memcpy?

1 Ответ

0 голосов
/ 12 декабря 2018

Если источником и назначением являются массивы, должно работать следующее:

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

int main()
{
  unsigned int src[] = { 0x12345678, 0X9ABCDEFF, 0XABCD2468 };
  unsigned int dest[4] = { 0 };

  typedef unsigned char BYTE;
  BYTE *pSrc = (BYTE*)(src), *pDst=(BYTE*)dest;

  for (int i=0; i<4; ++i)
  {
    memcpy(pDst, pSrc, 3);
    pSrc += 3;
    pDst += 4;
  }

  for (int i=0; i<4; ++i)
  {
    printf("%x\n", dest[i]);
  }

  return 0;
}

Вывод:

345678
deff12
689abc
abcd24
...