简体   繁体   中英

Cast an unsigned short/int to char *

I have a function like this

void UnitTestWorker::constructTestPayload(QByteArray &payload)
{
    QString List = "127.0.0.1";
    unsigned short Port = 12344;
    unsigned int RequestId = 1;
    memcpy(payload.data(),reinterpret_cast<char*>Port,sizeof(Port));
    memcpy(payload.data()+sizeof(Port),reinterpret_cast<char*>RequestId ,sizeof(RequestId ));
}

But I am getting access violation error, it seems like I can't do something like reinterpret_cast<char*>Port or reinterpret_cast<char*>RequestId .

You have to ensure that QByteArray &payload has a sufficient size to receive the data you byte copy to it:

if (payload.size()<sizeof(Port)+sizeof(RequestId)) 
    throw exception ("Ouch !! payload too small"); 
memcpy(payload.data(),reinterpret_cast<char*>(&Port),sizeof(Port));
memcpy(payload.data()+sizeof(Port),reinterpret_cast<char*>(&RequestId) ,sizeof(RequestId ));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM