Как упоминалось в других публикациях, senderId
и sequenceNumber
имеют тип int
, который, вероятно, будет больше чем char, поэтому эти значения будут усечены.
Если это приемлемо, тогда код в порядке. Если нет, то вам нужно разделить их на составляющие их байты. Учитывая, что протокол, который вы используете, будет определять порядок байтов многобайтовых полей, самый переносимый и наименее неоднозначный способ сделать это - сдвиг.
Например, предположим, что senderId
и sequenceNumber
имеют длину 2 байта, и протокол требует, чтобы старший байт шел первым:
char* Serialize() {
char *message = new char[MaxMailSize];
message[0] = senderId >> 8;
message[1] = senderId;
message[2] = sequenceNumber >> 8;
message[3] = sequenceNumber;
memcpy(&message[4], data, MaxDataSize);
return message;
}
Я бы также рекомендовал заменить цикл for
на memcpy
(если доступно), так как он вряд ли будет менее эффективным и сделает код короче.
Наконец, все это предполагает, что char
имеет длину в один байт. Если это не так, то все данные должны быть замаскированы, например ::
message[0] = (senderId >> 8) & 0xFF;