memcpy是否取决于源指针和目标指针的类型?

问题描述 投票:0回答:2

此代码,

uint32_t length;
BYTE* message;
printf("Inspecting message with length %d and contents: ", length);
for(int i=0;i<length;i++)
    printf("%d ", message[i]);
printf("\n");
....
char* outbuff;
outbuff = (char*) malloc(sizeof(char) * length + sizeof(int));
uint32_t data_length = htonl(length);
memcpy(outbuff, &data_length , sizeof(int));
memcpy(outbuff + sizeof(uint32_t), message, length);

printf("Sending  outbuff over network with length %d and contents: ", length);
for(int i=0;i<length;i++)
    printf("%d ", outbuff[i]);
printf("\n");

不会如实地将数据从消息和长度复制到副本。但是,一旦我将outbuff的类型从char *更改为BYTE *,它就可以正常工作。

知道为什么它会这样吗? documentation在此问题上无济于事。

EDIT.1:将&length更改为&data_length。我手动键入代码,而不是在SX中复制。

EDIT.2:用于打印出BYTE数组的代码。

c++ linux memcpy
2个回答
1
投票

[这里只是猜测,但我认为您打算使用网络字节顺序,因此要使用data_length属性,但是在此之后,您仍然要把length放入缓冲区。

您的


1
投票

我正在回答自己刚刚编辑的新标题问题;-)。

© www.soinside.com 2019 - 2024. All rights reserved.