根据 C 中的字节数从 char 数组复制整数

标签 c memcpy

我有一个包含整数值的 8 字节字符数组。我需要将 1 个字节复制到一个整数变量,将接下来的 4 个字节复制到不同的整数变量,将接下来的 3 个字节复制到另一个整数变量。 我使用了“memcpy”,但结果不正确。

我的尝试:

    unsigned char bytes[8];
    int Data1 = 32769;
    int Data2 = 65535;

    int logic1 = 0;
    int logic2 = 0;
    int logic3 = 0;

    memcpy(&bytes[0], &Data1, sizeof(Data1));
    memcpy(&bytes[4], &Data2, sizeof(Data2));

//Value of bytes[] array after this operation is
//bytes[0] = 1
//bytes[1] = 128
//bytes[2] = 0
//bytes[3] = 0
//bytes[4] = 255
//bytes[5] = 255
//bytes[6] = 0
//bytes[7] = 0



    memcpy(&logic1,&bytes,1);
    memcpy(&logic2,&bytes + 1,4);
    memcpy(&logic3,&bytes + 5,1);

My output should be :
logic1 = bytes[0]
logic2 = bytes[1] to bytes[4]
logic3 = bytes[5] to bytes[7]

最佳答案

我想你的意思是

memcpy( &logic1, &bytes[0], 1 );
memcpy( &logic2, &bytes[1], 4 );
memcpy( &logic3, &bytes[5], 3 );

请注意,&bytes 是指向整个数组的指针,因此&bytes + 1 指向超出数组末尾的位置,并且 &bytes + 5 远远超出了数组的末尾。因此,您会得到未定义的行为和无法解释的结果。

关于根据 C 中的字节数从 char 数组复制整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29380065/

相关文章:

JAVA Matrix-Vector-Multiplication比C版慢100倍

c++ - 将两个空指针 vector (void *) 合并到新的结果 vector 中

c++ - 表达式 : _CrtlsValidHeapPointer(pUserData) error

c - 安全编程中的 Memcpy()?

c - 接受整数 n 并设置第 n 位的函数

c - 将 C 指针打印为 %i 和 %u

opencv - 了解 memcpy() 完成的复制

c++ - memcpy 将 float 转换为 int

c - 为 DMA 使用保留内存

c - 在 C 中使用 #define 创建数组