在C中使用memcpy复制无符号字符数组

在C中使用memcpy复制无符号字符数组,c,C,这不会将字节数组复制到缓冲区。知道为什么吗??如何将阵列复制到缓冲区 当我尝试打印sizeof(buffer)或memcpy之后的内容时,它会显示0而没有内容。 我需要将它复制到缓冲区,因为我还有其他信息要与字节一起附加到缓冲区 int n=50; unsigned char bytes[4]; unsigned char *buffer=(unsigned char*)malloc(sizeof(int)); bytes[0]=(n>>24)&0xFF; bytes[1]=

这不会将字节数组复制到缓冲区。知道为什么吗??如何将阵列复制到缓冲区

当我尝试打印sizeof(buffer)或memcpy之后的内容时,它会显示0而没有内容。 我需要将它复制到缓冲区,因为我还有其他信息要与字节一起附加到缓冲区

int n=50;
unsigned char bytes[4];
unsigned char *buffer=(unsigned char*)malloc(sizeof(int));
bytes[0]=(n>>24)&0xFF;
bytes[1]=(n>>16)&0xFF;
bytes[2]=(n>>8)&0xFF;
bytes[3]=n&0xFF;

memcpy(buffer,bytes,sizeof(bytes));
假设您在32位机器上,“n”将是一个4字节的值。 n=0x00000032=00000000b00000000b00000000b00110010b

 int n=50; 
 bytes[3]=n&0xFF;
字节将有一个4字节的值:

 unsigned char bytes[4];
字节[0]=00000000b

 bytes[0]=(n>>24)&0xFF;
 bytes[1]=(n>>16)&0xFF;
 bytes[2]=(n>>8)&0xFF;
字节[1]=00000000b

 bytes[0]=(n>>24)&0xFF;
 bytes[1]=(n>>16)&0xFF;
 bytes[2]=(n>>8)&0xFF;
字节[2]=00000000b

 bytes[0]=(n>>24)&0xFF;
 bytes[1]=(n>>16)&0xFF;
 bytes[2]=(n>>8)&0xFF;
字节[3]=00110010b

 int n=50; 
 bytes[3]=n&0xFF;
将(sizeof(bytes))4个字节从字节复制到缓冲区

这是否符合你的期望也许是个问题。 (更多假设)


假设缓冲区为:

memcpy(buffer,bytes,sizeof(bytes));
上述声明将按预期复制。但是,如果您使用代码usch测试此假设:

int buffer[1];
输出将取决于您运行它的机器类型;小端点,或位端点

一方面,它会输出“缓冲=50” 另一方面,它将输出十进制值,该值等于:

printf("buffer = %d\n", buffer[0]);

假设:

0x32000000 (00110010b 00000000 00000000b 00000000b 00000000b)
很可能会生成编译器警告(或错误);并且可能不是您想要的,除非您按照以下方式更改memcpy():

int buffer;

缓冲区在哪里声明?请给出一个完整的代码示例,说明字节没有被复制。缓冲区是如何定义的?如何确定缓冲区尚未从字节[]复制到?。请输入更多代码。什么是
sizeof(int)
?显示“这不会将字节数组复制到缓冲区”的证据。我已经显示了完整的代码。如果您还显示了用于显示缓冲区结果值的printf()语句,这将非常有用。我将使用的语句:printf(“buffer=%d\n”,*(int*)buffer);[要打印sizeof(int),我将使用:printf(“sizeof(int)=%zu”,sizeof(int));]