此代码,
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数组的代码。
[这里只是猜测,但我认为您打算使用网络字节顺序,因此要使用data_length
属性,但是在此之后,您仍然要把length
放入缓冲区。
您的
我正在回答自己刚刚编辑的新标题问题;-)。