将char*分成几个变量

Mac*_*cik 3 c c++ arrays

我有一些char数组:char char[8]其中包含两个int,前4个索引是第一个int,接下来的4个索引有第二个int.

char array[8] = {0,0,0,1,0,0,0,1};
int a = array[0-3]; // =1;  
int b = array[4-8]; // =1;
Run Code Online (Sandbox Code Playgroud)

如何将此数组转换为两个int?

可以有任何其他类型,不一定是int,但这只是一些例子:

我知道我可以将这个数组复制到两个char数组,其大小为4,然后将每个数组转换为int.但我觉得这不好,打破了干净代码的原则.

Ben*_*igt 6

如果您的数据具有正确的字节顺序,则可以从字节缓冲区中提取可滑动类型memcpy:

int8_t array[8] = {0,0,0,1,0,0,0,1};
int32_t a, b;
memcpy(&a, array + 0, sizeof a);
memcpy(&b, array + 4, sizeof b);
Run Code Online (Sandbox Code Playgroud)

虽然@Vivek是正确的,ntohl可以用来规范化字节序,但你必须这样做是第二步.不要使用指针来玩游戏,因为它违反了严格的别名并导致未定义的行为(实际上,对齐异常或优化器将大部分代码丢弃为无法访问).

int8_t array[8] = {0,0,0,1,0,0,0,1};
int32_t tmp;
memcpy(&tmp, array + 0, sizeof tmp);
int a = ntohl(tmp);
memcpy(&tmp, array + 4, sizeof tmp);
int b = ntohl(tmp);
Run Code Online (Sandbox Code Playgroud)

请注意,几乎所有优化编译器都足够智能,当他们看到memcpy一个小的常量计数参数时,不会调用函数.