【问题标题】:Divide an array in half, then put each part into a unsigned int using c [duplicate]将一个数组分成两半,然后使用 c 将每个部分放入一个无符号整数中 [重复]
【发布时间】:2016-12-08 11:31:55
【问题描述】:

我想知道是否有人可以帮助我,我只学习 c,我正在尝试将一个名为 c0[8] 的 BYTE 数组拆分为大小为 [4] 的 2 个,然后将大小为 [4] 的每个放入一个无符号整数。仅使用给定的类型

所以我有

#define WORD32 unsigned int
#define BYTE   unsigned char

BYTE c0[8];
WORD32 FirstHalf, SecondHalf;

c0[8];

【问题讨论】:

  • 如果不指定字节序,这不是一个有意义的任务。

标签: c arrays


【解决方案1】:

您可以通过多种方式进行操作,但请记住字节序(我的示例是小字节序)。

使用 memcpy:

memcpy(c0, &FirstHalf, sizeof(WORD32));
memcpy(&c0[sizeof(WORD32)], &SecondHalf, sizeof(WORD32));

简单的分配:

FirstHalf = (WORD32) c0[0] | (WORD32) c0[1] << 8 | (WORD32) c[2] << 16 | (WORD32) c[3] << 24; 
SecondHalf = (WORD32) c0[4] | (WORD32) c0[5] << 8 | (WORD32) c[6] << 16 | (WORD32) c[7] << 24;

【讨论】:

  • 强制转换 - 根据标准导致未定义的行为
【解决方案2】:

试试这个:

char array[8] = {1,2,3,4,5,6,7,8};
char array1[4];
char array2[4];
unsigned int number1;
unsigned int number2;

memcpy(array1, array, 4);
memcpy(array2, array + 4, 4);

number1 = (array1[3] << 24) + (array1[2] << 16) + (array1[1] << 8) + array1[0];
number2 = (array2[3] << 24) + (array2[2] << 16) + (array2[1] << 8) + array2[0];

虽然有点依赖大/小端..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-17
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    • 2020-09-21
    相关资源
    最近更新 更多