- 论坛徽章:
- 0
|
从网络传输中接受到消息,写入到一段char buff[]中
网络消息的协议定义为开头一个大的struct
typedef struct _msg {
...
...
} msg;
后面跟 (tlv)tag length value 类型的消息
每个消息的类型不一样,所以都会强制转换成不同的类型交给各自的业务函数进行处理
例如 msg_type *req = (msg_type *)buff;
然后 function ( req, ... );
在function中, req += offset 这样的偏移量操作编译器报错,改成 req = req + offset 就ok,何解?
其次,在处理消息后面的(tlv) tag length value 类型消息时,每个value的类型和长度都是由tag和length确定,进行解析的时候强制转换成各自不同的类型时编译器也会报错
例如, req指针
|
| struct msg | tlv msg | tlv msg | ... |
将指针指向tlv消息时,读取其中的value进行强制转换 int tmp = (int)(*req)时编译器报错,但是定义一个char *p = (char *)req,然后 int tmp = (int)(*p)时可以通过,何解?
对于此类强制转换的问题,有没有详细的解释?
在处理此类消息解析的问题时,有没有更好的方法? |
|