我不停地想把一个uint16加到有效载荷的末端,然后放到接收器上,再把它放回c语言中的uint16。
uint16是cmpId。
发件人执行此操作:

        const UInt8* data = getArray(byteArray);
        data_length = getLenArray(byteArray)
        data_length = data_length + 2;
        UInt8 formatted_data[data_length];

        //serialize cmpid
        formatted_data[data_length-2] = cmpId & 0xff;
        formatted_data[data_length-1] = cmpId >> 8;

接收器这样做:
        UInt8 len = (UInt8) ((smip_receive_t *) data)->payloadLen;
        UInt8 * payload = (UInt8 *) ((smip_receive_t *) data)->payload;

        UInt16 cmpid;
        cmpid = (payload[len-2] << 8) | payload[len-1];

但是cmpId没有正确通过我做错什么了?

最佳答案

使用:

formatted_data[data_length-2] = cmpId & 0xff;
formatted_data[data_length-1] = cmpId >> 8;

您应该使用:
cmpid = (payload[len-1] << 8) | payload[len-2];

不是:
cmpid = (payload[len-2] << 8) | payload[len-1];

关于c - C:将uint16_t转换为字节以添加到发送方有效负载,然后在接收方再次返回,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41828856/

10-11 16:32