从char数组获取int32_t或int64_t值

Mie*_*iek 6 c++ arrays

我需要执行的操作要求我从char数组中获取一个int32_t值和2个int64_t值

char数组的前4个字节包含int32值,接下来的8个字节包含第一个int64_t值,接下来的8个字节包含第二个字节.我无法弄清楚如何获得这些价值观.我试过了;

int32_t firstValue = (int32_t)charArray[0];
int64_t firstValue = (int64_t)charArray[1];
int64_t firstValue = (int64_t)charArray[3];

int32_t *firstArray = reinterpet_cast<int32_t*>(charArray);
int32_t num = firstArray[0]; 
int64_t *secondArray = reinterpet_cast<int64_t*>(charArray);
int64_t secondNum = secondArray[0];
Run Code Online (Sandbox Code Playgroud)

我只是抓住稻草.任何帮助赞赏

Mys*_*ial 5

快速而肮脏的解决方案:

int32_t value1 = *(int32_t*)(charArray +  0);
int64_t value2 = *(int64_t*)(charArray +  4);
int64_t value3 = *(int64_t*)(charArray + 12);
Run Code Online (Sandbox Code Playgroud)

请注意,这可能会导致未对齐的内存访问。因此,它可能并不总是有效。


一个更强大的解决方案,不违反严格混叠并且不会出现对齐问题:

int32_t value1;
int64_t value2;
int64_t value3;

memcpy(&value1,charArray +  0,sizeof(int32_t));
memcpy(&value2,charArray +  4,sizeof(int64_t));
memcpy(&value3,charArray + 12,sizeof(int64_t));
Run Code Online (Sandbox Code Playgroud)