我是C ++和Qt的绝对初学者。
我使用Qt通过TCP广播不同的数据。发送和检索数据的过程运行正常但我在接收端解释数据时遇到了问题。
数据以不同的结构表示,这些结构的共同点是它们具有commandId
和状态。其余的可能是错误消息,文件名或其他东西。这段代码不是我自己编写的,我不允许更改它(例如:定义并实现一个通用接口。)
typedef struct
{
uint8_t commandId;
State state;
//special data
QString errorMessage;
} Command1;
typedef struct
{
uint8_t commandId;
State state;
//special data
uint8_t amountSensors;
} Command2;
enum State {
STATID_PAUSE = 50000
STATID_RECORD = 50001
STATID_PLAY = 50002
STATID_ERROR = 50003
}
发件人正在以这种方式将结构转换为QByteArray
:
Command1 example;
example.commandId = 134;
example.state = STATID_ERROR;
char *p_Char;
p_char = reinterpret_cast<char*>(&example);
QByteArray qba(p_char, sizeof(p_char));
现在我必须写一个接收器,但接收器不知道他得到了什么(Command1
,Command2
或其他东西)。他能够解释他是否可以读出commandId
和州。
此时我能够像这样读出commandId:
commandId = static_cast<uint8_t>(qba[0]);
但我怎么能读出State
的{{1}}?
答案 0 :(得分:1)
State
值的大小为int
。这意味着访问它你会做:
State state = (State) (*( reinterpret_cast<const int*>(qba.constData()+1)) );
首先,您将const char
指针重新解释为const int
指针,然后您将它指向它(这意味着您获取了值),并将此值转换为State
。
要访问其他变量,您将从索引1 + sizeof(int) = 1+ sizeof(State)