Hi, I've got a strange problem with changing my unsigned short values from host to the network byte order and vice versa. I have a client and a server, which communicate via their own binary protocol. I need to send some numerical values of unsigned short type, so in the client I do the following:
typedef unsigned short order_id_t; ... order_id_t orderNum; // variable declaration ... /* I generate a binary message of MSG_LENGTH length and copy the id to it */ void *msg; //binary message msg = (void *) malloc(MSG_LENGTH); orderNum = htons(orderNum); memcpy(msg+OFFSET,&orderNum,sizeof(order_id_t)); /* Now I face a strange problem */ fprintf(stdout,"Your ID is:%d",ntohs(orderNum)); // here the correct number is written to the stdout fprintf(stdout,"Your ID is:%d",ntohs( (order_id_t) *(msg+OFFSET))); // here t I get strange values, as if I had only the higher byte // e.g., if orderNum is < 255, then I get 0, 256 gives me 256 correct, 257...260 all give 256 etc. Any idea what could help here? _______________________________________________ help-gplusplus mailing list help-gplusplus@gnu.org http://lists.gnu.org/mailman/listinfo/help-gplusplus